动态创建临时表

 

-------------------------------------
--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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值