0

変数(実際にはいくつかありますが、この目的のために単純化します)を受け入れるストアドプロシージャを記述し、その変数に基づいてフィルタリングするSQLステートメントを作成する必要があります。ただし、ユーザーがその変数を渡すかどうかはオプションです。ユーザーが変数を渡さない場合、フィルターはNull値を返すのではなく、その部分を無視する必要があります。

基本的に、私が持っているのは次のとおりです。

@VariableA varchar(50)
@SQL nvarchar(max)

Select @SQL = 'Select ColumnX from TableY where (('+@VariableA+ ' = somevalue) or (@VariableA is null))'

exec sp_executesql @SQL

したがって、私の問題は、@ SQL文字列がクエリとして実行されるときに、@VariableA変数がスコープ外になることです。実行する動的SQLクエリを作成するだけでなく、ユーザーが渡さない場合は変数のnull値を確認するにはどうすればよいですか?

4

1 に答える 1

0

ここにさらにいくつかのパラメーターを追加する必要があり、@ SQL文字列の変数を連結する必要はありません。追加の変数は、動的SQLに何を参照するかを指示します。

declare @VariableA varchar(50)
  , @SQL nvarchar(max)

Select @SQL = N'Select ColumnX from TableY where (@VariableA = somevalue) or (@VariableA is null)'

exec sp_executesql @SQL, N'@VariableA varchar(50)', N'@VariableA = @VariableA'

動的SQLの前に、@VariableAを適切に設定する必要があります。

詳細: http: //msdn.microsoft.com/en-us/library/ms188001 (v = sql.100).aspx

于 2012-12-20T15:58:24.333 に答える