2011-01-04 3 views
1

У меня есть таблица, но я не знаю ее столбцов. Это имя XВыбрать оператор с строковым выражением

я могу найти его столбцы с помощью следующего кода:

DECLARE @columnNames NVARCHAR(4000) = '' 
SELECT @columnNames = @columnNames + ', ' + COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'X' 

Теперь я хочу использовать отборное заявление в моей таблице, но как?

Я думаю, это должно быть так. Я не нашел правильный путь:

SELECT SUBSTRING(@columnNames, 2, LEN(@columnNames)) FROM X 

редактировать:

На самом деле я хочу, чтобы объединить столбцы без столбца идентификаторов.

DECLARE @columnNames NVARCHAR(4000) = '' 
SELECT @columnNames = @columnNames + ' + ' + COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = 'X' AND COLUMN_NAME <> 'id' 

А потом

SELECT SUBSTRING(@columnNames, 4, LEN(@columnNames)) FROM X 
+4

Я знаю, что это плохая форма, но почему не 'выбрать * из x' работы для тебя? –

+0

Фактически я хочу объединить столбцы без столбца id. ВЫБОР @columnNames = @columnNames + '+' + column_name ИЗ INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'X' AND COLUMN_NAME <> 'ID' , а затем я хочу использовать выберите ... – ogun

ответ

1

Если вы хотите, чтобы выбрать поля в строке вы запрашиваете вам нужно будет использовать EXEC (или sp_executesql)

DECLARE @columnNames NVARCHAR(4000) = '' 
SELECT @columnNames = @columnNames + case when len(@columnNames)=0 then '' else ', ' end + COLUMN_NAME FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = X 

DECLARE @SQL NVARCHAR(1024) = 'select ' + @columnNames + ' from X' 
EXEC (@SQL) 
2

После осветленной цели и объяснение, почему * не будет работать для вас, вам нужно будет объединить все SELECT заявление и использовать динамический SQL. Вы должны использовать QUOTE_NAME, чтобы избежать проблем с нестандартными именами.

См The Curse and Blessings of Dynamic SQL: Dealing with Dynamic Table and Column Names

1

вам необходимо использовать динамический SQL, чтобы сделать это, но быть в курсе опасностей, читать эту http://www.sommarskog.se/dynamic_sql.html

Но так как вы выбираете все столбцы, я не вижу смысла в том, что вы делаете ... просто использовать SELECT * FROM X

2

Если вы выбираете все столбцов вашей таблицы, почему не просто использовать SELECT * FROM X?. Другой способ - с динамическим sql, и это не очень хорошая идея.

+0

из-за слияния колонн .. .xx для вашего ответа. – ogun

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