在T-SQL中对所有列进行操作

时间:2014-07-13 11:05:21

标签: sql-server tsql loops cursor field

是否可以对循环中的所有行进行操作?

我们说我有一个包含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

1 个答案:

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