0

我有一种情况,我可能需要将一个可能包含 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

什么是允许fn_Scalar通过动态和静态 SQL 语句调用并且仍然允许将第二个参数设置为值NULL、 或default.

4

1 回答 1

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
于 2013-06-28T15:13:16.187 回答