将NULL文本转换为空值

时间:2013-06-28 14:35:49

标签: sql-server-2008 tsql dynamic-sql

我有一种情况,我可能需要将一个可能保存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}}。

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