1

无论出于何种原因,我似乎都无法从 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 的那天我错过了什么吗?明显地!但是什么?

4

2 回答 2

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
于 2011-05-03T22:40:31.967 回答
0

sp_executesql返回(生成)一个结果集。 @FieldValue在上面的代码中没有意义 -sp_executesql不会将任何值放入该变量。

于 2011-05-03T22:37:52.917 回答