Выберите столбцы с помощью цикла - PullRequest
2 голосов
/ 26 января 2012

У меня есть таблица в 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 для получения каждого столбца. Любая помощь будет оценена. Спасибо.

Edit: В итоге я использовал предложение @ 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)

1 Ответ

2 голосов
/ 26 января 2012

Один из способов сделать это:

Следующий выбор дает вам список столбцов:

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 из столбцов первого выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...