Как я могу запросить значение динамически в T-SQL? - PullRequest
1 голос
/ 04 мая 2011

По какой-то причине я не могу получить значение динамически из 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? Очевидно! Но что?

Ответы [ 2 ]

1 голос
/ 04 мая 2011

См. Этот пример

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
0 голосов
/ 04 мая 2011

sp_executesql возвращает (генерирует) набор результатов. @FieldValue не имеет смысла в приведенном выше коде - sp_executesql не поместит никакого значения в эту переменную.

...