Выберите оператор со строковым выражением - PullRequest
1 голос
/ 04 января 2011

У меня есть таблица, но я не знаю ее столбцы. Это зовут X

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

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

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

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

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

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

На самом деле я хочу объединить столбцы без id столбца.

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 ]

2 голосов
/ 04 января 2011

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

2 голосов
/ 04 января 2011

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

См. Проклятие и благословения динамического SQL: работа с именами динамических таблиц и столбцов

1 голос
/ 04 января 2011

Если вы хотите выбрать поля в строке, которую вы выбираете, вам нужно будет использовать 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)
1 голос
/ 04 января 2011

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

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

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