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 ステートメントを介して呼び出すことを許可し、2 番目のパラメーターを値 、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 に答える