我在SQL Server 2005中有一个表,列数可变,前两个是唯一不变的列。 我已经设法获得表中的列数,所以我有什么可以计算,但我真的不知道如何选择可变数量的列。
SELECT
DISTINCT
COUNT(*)
FROM
INFORMATION_SCHEMA.[COLUMNS]
WHERE
TABLE_NAME = 'SOME_TABLE'
AND
(COLUMN_NAME <> 'STATIC_COL1' AND COLUMN_NAME <> 'STATIC_COL2')
我猜我需要使用while循环来获取每一列。 任何帮助,将不胜感激。 感谢。
编辑: 我最终使用了@ aF的动态SQL建议(见下文)
DECLARE @CMD AS VARCHAR(MAX)
SET @CMD = 'SELECT '
DECLARE @COL AS VARCHAR(MAX)
DECLARE COLUMN_CURSOR CURSOR FOR
SELECT
COLUMN_NAME
FROM
INFORMATION_SCHEMA.[COLUMNS]
WHERE
TABLE_NAME = 'SOME_TABLE'
OPEN COLUMN_CURSOR
FETCH NEXT FROM COLUMN_CURSOR
INTO @COL
WHILE @@FETCH_STATUS = 0
BEGIN
IF @COL = 'STATIC_COL1'
BEGIN
SET @CMD = @CMD + @COL
END
FETCH NEXT FROM COLUMN_CURSOR
INTO @COL
SET @CMD = @CMD + ', CAST(' + @COL +' AS INT) AS ' + @COL
END
CLOSE COLUMN_CURSOR
DEALLOCATE COLUMN_CURSOR
SET @CMD = @CMD + ' FROM SOME_TABLE'
EXEC (@CMD)
答案 0 :(得分:2)
一种方法:
以下选项为您提供了列列表:
SELECT
column_name
FROM
INFORMATION_SCHEMA.[COLUMNS]
WHERE
TABLE_NAME = 'SOME_TABLE'
AND
(COLUMN_NAME <> 'STATIC_COL1' AND COLUMN_NAME <> 'STATIC_COL1')
通过它,您可以构造预期的查询并使用动态SQL来执行它。
动态SQL是这样的:
declare @cmd = 'select * from some_table'
exec(@cmd)
在这种情况下,您需要使用第一个选择中的列构建@cmd
。