是否可以对循环中的所有行进行操作?
我们说我有一个包含20个int列的表。
我想检查行的所有列的条件(分隔)并根据条件执行操作。我可以用列上的循环或光标之类的东西来做吗?
伪代码:
foreach field in table1
begin
if field > 10
print field -- (print field value)
end
没有循环,我必须这样做:
-- some select statement
if field1 > 10
print field1
if field2 > 10
print field2
...
if field20 > 10
print field20
答案 0 :(得分:1)
您可以使用动态SQL执行类似的操作:
DECLARE @SQL VARCHAR(MAX);
SELECT @SQL = COALESCE(@SQL + ' ', '') +
'SELECT ''' + TABLE_NAME + ''' AS TABLE_NAME, ''' +
COLUMN_NAME + ''' AS COLUMN_NAME, ' +
COLUMN_NAME + ' AS Value FROM ' +
TABLE_NAME + ' WHERE ' + COLUMN_NAME + ' > 10' +
CASE
WHEN c.ORDINAL_POSITION <> MAX(ORDINAL_POSITION) OVER () THEN ' UNION ALL '
ELSE ''
END
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'MyTable' AND
c.DATA_TYPE = 'int'
ORDER BY c.ORDINAL_POSITION;
EXEC(@SQL);
这将确定指定表(WHERE子句中的MyTable)的哪些列是INT并放在一起以查找这些列中的哪些值大于10,在本例中。每行代表表中的一列。代码将UNION所有这些行组合在一起并执行生成的查询。你会得到这样的输出:
TABLE_NAME COLUMN_NAME Value
Table1 Col1 11
Table1 Col1 200
Table1 Col3 56