#sql #tsql #dynamic #sp-executesql
#sql #tsql #динамический #sp-executesql
Вопрос:
По какой-то причине я не могу динамически выводить значение из SQL.
declare @SQL nvarchar(max)
declare @FieldName nvarchar(255)
declare @FieldValue nvarchar(max)
select @SQL = 'SELECT TOP 1 ' @fieldname
' FROM MyTable WHERE CM_CASE_YEAR = ' LEFT(@ClaimNumber, 2)
' AND CM_CASE_NUMBER = ' RIGHT(@ClaimNumber, 6)
exec sp_executesql @sql, @FieldValue OUTPUT
select @FieldName ' - ' @FieldValue
Когда я запускаю @SQL
запрос в другом окне, он отображает один столбец с одним значением.
Но, к сожалению, когда я пытаюсь это сделать, @FieldValue всегда возвращает значение NULL.
Я что-то пропустил в тот день, когда они преподавали sp_executesql? Очевидно! Но что?
Ответ №1:
Смотрите этот пример
DECLARE @SQL NVARCHAR(MAX)
DECLARE @FieldName sysname = 'name'
DECLARE @FieldValue NVARCHAR(MAX)
SELECT @SQL = 'SELECT TOP 1
@FieldValue =' QUOTENAME(@FieldName) ' FROM sys.objects'
EXEC sp_executesql @SQL,
N'@FieldValue nvarchar(max) OUTPUT',
@FieldValue =@FieldValue OUTPUT
SELECT @FieldName ' - ' @FieldValue
Ответ №2:
sp_executesql
возвращает (генерирует) результирующий набор. @FieldValue
не имеет смысла в приведенном выше коде — sp_executesql
не помещает никакого значения в эту переменную.
Комментарии:
1. Хорошо, не могли бы вы рассказать мне, КАК я могу ввести значение в эту переменную?
2. Я только что запустил MSSQL для этой цели, Джейсон, но Мартин ответил раньше, чем я смог!