Рассмотрим У меня есть таблица TEMP с двумя полями
БЛОК ZONE
==== ====
Unit1 Zone1
Unit2 Zone2
Как использовать строки имя столбца внутри динамического SQL
Я пытаюсь добиться результата после простого запроса с использованием динамического запроса
select UNIT, ZONE from TEMP
Мой динамический запрос - это gi аже ниже
declare @qry nvarchar(1000)
set @qry= 'declare @str varchar(100) = ''UNIT, ZONE''
select @str from TEMP '
execute sp_executesql @qry
Но этот запрос выбирает значение строки («» БЛОКА, ZONE «») вместо приведенных ниже строк
Unit1 Zone1
Unit2 Zone2
Вкратце: Как я могу сказать, что SQL @str задает столбец в таблице?
Я знаю, что это можно сделать, предоставив параметр следующим образом, но, к сожалению, это не то, что я хочу.
declare @qry varchar(1000)
declare @str varchar(100) = 'UNIT, ZONE'
set @qry ='select ' + @str + ' from TEMP'
execute sp_executesql @qry
Почему на земле вы не хотите, чтобы сделать это так, что вы уже знаете, работает ? Вся причина использования DynamicSQL * (Динамическая запись нового запроса для выполнения с помощью sp_executesql) * заключается в том, что ваши переменные могут быть только значениями строк и никогда не могут быть объектами (база данных, схема, таблица, столбец и т. Д.). Ссылка ... – MatBailie
Объясните, почему вы не хотите использовать метод, который вы уже знаете. Невозможно дать вам альтернативу, если мы не знаем, почему найденный вами не применим. – Paolo
@Paolo Спасибо за ваш ответ. Я знаю, что это выглядит странно, но имена полей также генерируются динамически, поэтому я не могу объявить его до вызова 'execute'. Подставляя значение, я могу сделать запрос как _выбрать foo из temp_, а не _select 'foo' из temp_? –