2015-04-24 4 views
0

Я пытаюсь создать обычный SQL-запрос, который динамически вызывает столбец из определенной таблицы. Я прочитал какой-то форум о том, как получить список столбца, используя INFORMATION_SCHEMA.COLUMNS, но я хочу выбрать столбец от INFORMATION_SCHEMA.COLUMNS from my table.INFORMATION_SCHEMA.COLUMNS выберите из таблицы sql server

Например:

SELECT (SELECT TOP 1 COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = N'OPOR' AND LEFT(COLUMN_NAME, 2) = 'U_') FROM OPOR 

Но возвращать только имя столбца. Не значения из этого столбца в моей таблице. Так что мой вопрос: возможно ли вернуть значение от INFORMATION_SCHEMA.COLUMNS и выбрать его из моей таблицы? Моя колонка примера: U_NewColumn. Таким образом, результат должен быть следующим: SELECT U_NewColumn FROM OPOR

+0

вы можете написать динамический запрос – Dhaval

+0

@Dhaval вы можете дать мне пример для этого? –

ответ

5

INFORMATION_SCHEMA.COLUMNS полезен, когда вы хотите построить динамический запрос, в котором вы получите список таблицы/столбца на основе какого-либо фильтра, который у вас есть. В твоем случае. то, что вы хотите сделать, - создать динамический sql, где вы хотите получить данные первой колонки, которая начинается с U_

Вы бы сделали что-то вроде этого.

DECLARE @Variable NVARCHAR(200) = 'SELECT ' 
SELECT TOP 1 @Variable = @Variable + QUOTENAME(COLUMN_NAME,']') + ' FROM ' + QUOTENAME(TABLE_NAME,']') 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = N'OPOR' AND LEFT(COLUMN_NAME, 2) = 'U_' 

EXEC sp_executeSQL @Variable 

Если вы хотите более одного столбца, вы могли бы сделать что-то вроде этого

DECLARE @TableName NVARCHAR(100) = 'OPOR' 
DECLARE @Variable NVARCHAR(200) 
SELECT @Variable = 'SELECT ' + STUFF((
SELECT', ' + QUOTENAME(COLUMN_NAME,']') 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = @TableName AND LEFT(COLUMN_NAME, 2) = 'U_' 
FOR XML PATH(''), TYPE).value('.','NVARCHAR(MAX)'),1,1,'') + ' FROM ' + @TableName 


PRINT @Variable 
EXEC sp_executeSQL @Variable 
+1

оцените. Но что, если есть больше столбцов, не TOP 1? –

+0

, пожалуйста, проверьте обновленный ответ – ughai

+0

Если вы используете TOP без заказа, вам не гарантируется, какая строка будет возвращена. В этом примере, если вам нужен «первый» столбец, вам нужно будет заказать ORDINAL_POSITION. –

Смежные вопросы