У меня есть таблица (не разработанная мной), которая имеет 20 переменных столбцов. То есть, в зависимости от того, какой тип записи вы просматриваете, применимое имя столбца может измениться.
Возможные имена столбцов хранятся в другой таблице, которую я могу очень легко запросить.
Поэтому запрос, который я действительно ищу, выглядит примерно так:
SELECT Col1 AS (SELECT ColName FROM Names WHERE ColNum = 1 and Type = @Type),
Col2 AS (SELECT ColName FROM Names WHERE ColNum = 2 and Type = @Type)
FROM Tbl1
WHERE Type = @Type
Очевидно, что это не работает, так как я могу получить аналогичный результат?
«
Я пытался создать строку запроса и использовать
Оказывается, я использовал неправильный запрос для построения динамического SQL и поэтому создал пустую строку. SQL Server определенно выполнил пустую строку правильно.EXECUTE
ее, но она просто возвращает« Команда (и) успешно выполнена ») и, похоже, не возвращает набор строк.
Обратите внимание, что причина, по которой мне это нужно, а не просто жесткое кодирование имен столбцов, заключается в том, что имена столбцов настраиваются пользователем.
источник
Ответы:
Попробуйте следующий код:
Это возвращает инструкцию SELECT:
SELECT CONVERT(INT, Col1) AS [AccountID],CONVERT(VARCHAR(50), Col2) AS [AccountName],CONVERT(DATE, Col3) AS [AccountOpenDate] FROM #Data WHERE [Type] = 'Account'
источник
Это звучит замечательно для внешнего интерфейса дисплея. Запрос 1 будет возвращать ваши данные, запрос 2 будет извлекать имена столбцов и в коде, когда вы создаете какую-либо структуру, которую вы используете для отображения, вы устанавливаете заголовки из второго запроса.
Хотя метод Pure SQL может быть возможен, это будет динамический SQL, а обслуживание кода станет кошмаром.
Кроме того, вы, вероятно, ищете,
sp_executesql
и не толькоEXECUTE N'Query String'
это может исправить вашу проблему команды завершена успешно.источник