我有一个关于动态创建临时表的问题。
我需要一个 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
。
答案 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