Я создал следующую таблицу:
CREATE TABLE TestABC (
colID INT NOT NULL,
colName VARCHAR(10) NULL,
);
INSERT INTO TestABC
(colID, colName)
VALUES
(1,'ABC'),
(2,'DEF'),
(3,'GHI');
Когда я запускаю следующий запрос к приведенной выше таблице...
DECLARE @Name varchar(max)
select @Name = colName from dbo.TestABC where colID = '3'
print @Name
Я получаю следующий ожидаемый результат, что хорошо:
GHI
Теперь я пытаюсь передать SELECT с моим параметром @Name внутри динамического SQL:
DECLARE @sql varchar(max)
DECLARE @Name varchar(max)
set @sql = '
select ' + @Name + ' = colName from dbo.TestABC where colID = ''3''
'
print @sql
Проблема, с которой я сталкиваюсь, заключается в том, что внутри динамического SQL мой параметр @Name не оценивается и приводит к пустому или NULL. Кроме того, весь мой динамический параметр sql @sql также заканчивается NULL.
Я полностью понимаю, что если я добавлю следующую дополнительную строку перед моим динамическим SQL, то @Name должен быть правильно оценен...
SELECT @Name = colName from dbo.TestABC
Однако это не моя цель. Мне нужно, чтобы SELECT был полностью динамическим, так как в конечном итоге я буду передавать свой dbo.TestABC динамически. Поэтому я не могу предварительно назначить параметр @Name, как в приведенном выше SELECT.
Как мне заполнить параметры @Name и @sql в моем SELECT внутри моего динамического SQL?
NULL
, это потому, что ваше выражение оценивается какset @sql = 'select ' + NULL + ' = colName from dbo.TestABC where colID = ''3'''
и объединяетNULL
в строку =NULL
. - person Larnu   schedule 22.02.2019