WHILE LOOP中的临时表

时间:2015-11-19 09:16:51

标签: sql-server tsql

我有一个关于动态创建临时表的问题。

我需要一个 while循环,其中使用变量@i在名称不同的每个循环中创建临时表。所以我将变量@CreateTableVerbGES@ShowTableVerbGES与代码一起指定为字符串,并希望在循环中执行它们。

这是我的代码:

DECLARE @i int = 1
DECLARE @CreateTableVerbGES nvarchar(max)
DECLARE @ShowTableVerbGES nvarchar (max)

WHILE @i<4

BEGIN

SET @CreateTableVerbGES = 'CREATE TABLE #UnterBaugruppe'+CAST((@i) as nvarchar(max))+' ([IDTBG] [int] identity(1,1),[IDGES] [int] NULL,[Baugruppe1] [nvarchar](max) NULL,[IDBG1] [int] NULL,[Bauteil1] [int] NULL,[Baugruppe2] [nvarchar](max) NULL,[IDBG2] [int] NULL,[Bauteil2] [int] NULL,[Baugruppe3] [nvarchar](max) NULL,[IDBG3] [int] NULL,[Bauteil3] [int] NULL)'

SET @ShowTableVerbGES = 'SELECT * FROM #UnterBaugruppe'+CAST((@i) as nvarchar(max))

EXEC (@CreateTableVerbGES)
EXEC (@ShowTableVerbGES)

SET @i += 1

END

问题是看起来循环的第一个循环正在运行,因为显示了第一个表#UnterBaugruppe1。但是对于接下来的两个周期,会有一个警告:表#UnterBaugruppe2#UnterBaugruppe3无效且不存在。

有人知道它为什么不起作用吗?

我真的需要循环中的表,因为我想在循环中插入不同的信息,并依赖于@i

1 个答案:

答案 0 :(得分:0)

我只是使用换行符将两个变量的动态sql连接成单个并执行,它对我来说非常有效!

DECLARE @i int = 1
DECLARE @CreateTableVerbGES nvarchar(max)
DECLARE @ShowTableVerbGES nvarchar (max)

WHILE @i<4

BEGIN

SET @CreateTableVerbGES = 'CREATE TABLE #UnterBaugruppe'+CAST((@i) as nvarchar(max))+' ([IDTBG] [int] identity(1,1),[IDGES] [int] NULL,[Baugruppe1] [nvarchar](max) NULL,[IDBG1] [int] NULL,[Bauteil1] [int] NULL,[Baugruppe2] [nvarchar](max) NULL,[IDBG2] [int] NULL,[Bauteil2] [int] NULL,[Baugruppe3] [nvarchar](max) NULL,[IDBG3] [int] NULL,[Bauteil3] [int] NULL)'
+ CHar(10) + Char(13) + 'SELECT * FROM #UnterBaugruppe'+CAST((@i) as nvarchar(max)) + CHar(10) + Char(13) 

Print @CreateTableVerbGES
EXEC (@CreateTableVerbGES)
--EXEC (@ShowTableVerbGES)

SET @i += 1

END