您的位置:首页 > 其它

动态创建临时表

2009-04-15 10:36 218 查看


-------------------------------------
--create table
-------------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cellinf]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[cellinf]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[rowinf]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[rowinf]
GO

CREATE TABLE [dbo].[cellinf] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[cell] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[rowinf] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[row] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[cellinf] WITH NOCHECK ADD
CONSTRAINT [PK_cellinf] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[rowinf] WITH NOCHECK ADD
CONSTRAINT [PK_rowinf] PRIMARY KEY CLUSTERED
(
[id]
) ON [PRIMARY]
GO

-----------------------------------------------------------------
--insert data
-----------------------------------------------------------------
insert into cellinf(cell) values ('姓名')
insert into cellinf(cell) values ('项一')
insert into cellinf(cell) values ('项二')
insert into cellinf(cell) values ('项三')

insert into rowinf(row) values ('1行')
insert into rowinf(row) values ('2行')
insert into rowinf(row) values ('3行')
insert into rowinf(row) values ('4行')
-----------------------------------------------------------------
--create procedure
-----------------------------------------------------------------

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[mytable]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[mytable]
GO

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE mytable AS
DECLARE @create_sql varchar(8000)
SET @create_sql = ''
DECLARE pxReg_Cursor CURSOR
FOR SELECT cell FROM cellinf

DECLARE @itemname varchar(500)

OPEN pxReg_Cursor

FETCH NEXT FROM pxReg_Cursor INTO @itemname

WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @create_sql = @create_sql + @itemname + ' varchar(500),'
FETCH NEXT FROM pxReg_Cursor INTO @itemname
END

CLOSE pxReg_Cursor
DEALLOCATE pxReg_Cursor
SELECT @create_sql=LEFT(@create_sql, LEN(@create_sql)-1)

SELECT @create_sql= 'CREATE TABLE #reg('+@create_sql+') '

DECLARE @insert_sql varchar(8000)
SET @insert_sql=' INSERT INTO #reg(姓名) SELECT row as 姓名 FROM rowinf '

DECLARE @sel_sql varchar(8000)
SET @sel_sql=' SELECT * FROM #reg drop table #reg '

--print @create_sql
EXEC (@create_sql + @insert_sql + @sel_sql)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

EXEC mytable
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: