我有一种情况,我可能需要将一个可能保存NULL值的变量传递给函数,但是通过sp_executesql
,所以我需要通过字符串连接将它转换为字符串值。
declare @var1 varchar(10) = 'value'
declare @var2 varchar(10) = null
declare @sql nvarchar(2000)
.
.
set @sql = '
select dbo.fn_Scalar(''' + @var1 + ''', ''' + @var2 + ''' )
'
Create Function [dbo].[fn_fn_Scalar]
(
@var1 varchar(10) ,
@var2 varchar(10) = null
) RETURNS float
AS BEGIN
Declare @ret float
Select @ret = sum(value)
from Table
where Field1 = @var1
and Field2 like isnull(@var2, '%')
return @ret
END
允许通过动态和静态SQL语句调用fn_Scalar
的最佳方法是什么,并且仍然允许将第二个参数设置为值NULL
或{{ 1}}。
答案 0 :(得分:2)
您可以将参数传递给sp_executesql
函数,如下所示:
declare @var1 varchar(10) = 'value'
declare @var2 varchar(10) = null
Set @ParamDefinition = '@var1 varchar(10), @var2 varchar(10)'
Execute sp_Executesql 'select dbo.fn_Scalar(@var1,@var2)', @ParamDefinition, @var1, @var2