使用不同的表循环通过动态sql查询

时间:2014-04-18 01:55:40

标签: sql sql-server sql-server-2008 cursor

我目前正在处理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

1 个答案:

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