循环遍历SQL Server中的表记录

时间:2016-08-03 10:59:29

标签: sql sql-server dynamic-sql

我有一张桌子:

Screenshot of table

android:thicknessRatio="2" 中的每个记录都包含另一个表ColumnName中列的名称。我想循环浏览regressionDifferences并选择ColumnName中的每个列并将其插入regressionDifferences。目前我只专注于将列内容打印到屏幕上,然后我会担心插入它。 这是我到目前为止所写的:

ColumnContent

由于某种原因,这只是返回列的名称,即DECLARE @LoopCounter INT = 1, @MaxRowNumber INT = 42762, @ColumnName VARCHAR(max), @UniqueID VARCHAR(max) WHILE(@LoopCounter < @MaxRowNumber) BEGIN SELECT @ColumnName = ColumnName FROM ColumnDifference WHERE RowNumber = @LoopCounter SELECT @UniqueID = UniqueID FROM ColumnDifference WHERE RowNumber = @LoopCounter SELECT DISTINCT @ColumnName AS ColumnContent FROM regressionDifferences rD WHERE rD.UniqueID LIKE @UniqueID + '%' SET @LoopCounter = @LoopCounter + 1 END 等,而不是每列的实际内容。

任何人都可以帮我解决我出错的地方吗?

谢谢

2 个答案:

答案 0 :(得分:1)

declare @sql varchar(max);
set @sql ='SELECT DISTINCT ' + @ColumnName + 'AS ColumnContent FROM regressionDifferences rD WHERE rD.UniqueID LIKE ''' 
                       + @UniqueID + '%'''
exec(@sql);

使用上面的查询来创建你需要的动态sql。

您的动态查询等同于

SELECT DISTINCT 'a_4' AS ColumnContent FROM regressionDifferences rD
WHERE rD.UniqueID LIKE '2016-07-26''+ '%'

在动态查询中,变量@ColumnName不会被视为列名。它被视为文本

答案 1 :(得分:-1)

SELECT DISTINCT @ColumnName AS ColumnContent FROM regressionDifferences rD
WHERE rD.UniqueID LIKE @UniqueID + '%'

不应该@ColumnName不是别的吗?