我目前正在处理sql任务,我需要有关查询的帮助。所以基本上,我试图循环使用类似列的几个表(尽管其中包含不同的数据)。
我是通过使用逗号作为分隔符来传递表名字符串来实现的。然后我使用函数[dbo].[ufn_tbSplit]
拆分字符串,然后返回一个临时表,其中包含一个名为' Token'那些存储表格'名。
所以,在这里,我使用游标循环遍历每个表。没问题。但是当我想循环+ ' UNION SELECT DISTINCT [Die_X_Position], [Die_Y_Position] FROM '
语句时,问题就出现了。如果我只有2个表,那就没问题了。但如果我有5张桌子怎么办?我想循环union语句,以便它也包括所有其他表。我怎样才能做到这一点?我目前正在使用MS SQL Server 2008 R2。谢谢!
DECLARE C1 CURSOR FOR SELECT Token FROM [dbo].[ufn_tbSplit](@TableString_IN, ',')
OPEN C1
FETCH next FROM C1 INTO @TempTable
WHILE @@FETCH_STATUS <> -1
BEGIN
SET @xDie1 = @TempTable
FETCH next FROM C1 INTO @TempTable
SET @xDie2 = @TempTable
SET @xDie = 'SELECT DISTINCT [Die_X_Position], [Die_Y_Position] FROM ' + @xDie1
+ ' UNION SELECT DISTINCT [Die_X_Position], [Die_Y_Position] FROM ' + @xDie2
EXEC sp_executesql @xDie
FETCH next FROM C1 INTO @TempTable
END
CLOSE c1
DEALLOCATE c1
答案 0 :(得分:1)
这应该有你需要的东西。
DECLARE @sql varchar(max)
set @sql = ''
DECLARE @sqlTemplate varchar(max)
set @sqlTemplate = ' SELECT DISTINCT [Die_X_Position], [Die_Y_Position] FROM '
DECLARE @i int
set @i = 0
DECLARE C1 CURSOR FOR SELECT Token FROM [dbo].[ufn_tbSplit](@TableString_IN, ',')
OPEN C1
FETCH next FROM C1 INTO @TempTable
WHILE @@FETCH_STATUS <> -1
BEGIN
if @i <> 0
begin
set @sql = @sql + ' UNION ' + @sqlTemplate + @TempTable
end
else
begin
set @sql = @sqlTemplate + @TempTable
end
set @i = @i + 1
FETCH next FROM C1 INTO @TempTable
END
EXEC sp_executesql @sql
CLOSE c1
DEALLOCATE c1