繁体   English   中英

使用不同的表循环遍历动态SQL查询

[英]Loop through dynamic sql query using different tables

我目前正在执行sql任务,并且需要有关查询的帮助。 因此,基本上,我试图遍历具有相似列的多个表(尽管其中包含不同的数据)。

我这样做是通过以逗号作为分隔符的表名字符串传递的。 然后,我使用函数[dbo].[ufn_tbSplit]拆分了字符串,该函数然后返回一个临时表,该表带有名为“令牌”的列,用于存储表的名称。

因此,在这里,我使用游标遍历每个表。 没问题。 但是当我想循环+ ' UNION SELECT DISTINCT [Die_X_Position], [Die_Y_Position] FROM '语句时,问题就来了。 如果我只有2张桌子,那就没问题了。 但是,如果我有5张桌子怎么办? 我想循环并集语句,以便它也将包括所有其他表。 我该如何实现? 我目前正在使用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

这应该有您需要的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM