2

クエリ自体を作成する必要がないexecで変数値を使用したいと思います。データベースのフィールドにクエリを格納し、そのストアドプロシージャのパラメータを使用してクエリを実行したいと思います。以下の例では、2つの変数を宣言しました。@ ValueVariableはストアドプロシージャのパラメーターであり、@ QueryStringを宣言したものはデータベースから読み取るものであり、@ValueVariableの値を使用して実行します。

DECLARE @ValueVariable  int=0
        @QueryString    VARCHAR(MAX)=
                        'SELECT UserName FROM TableUser WHERE UserId=@ValueVariable'

EXEC(@QueryString)

それを実行しようとすると、エラーが発生します'SELECT UserName FROM TableUser WHERE UserId =@ValueVariable'の近くの構文が正しくありません

私はそれができることを知っています

@QueryString    VARCHAR(MAX)=
                            'SELECT UserName FROM TableUser WHERE UserId='+@ValueVariable

しかし、私は上記のようにそれを使いたいです。プロシージャでクエリを実行するのではなく、DBから取得した文字列のように変数値を使用します。

したがって、現在の環境で変数の値を使用してそれを実行できる方法はありますか。

4

1 に答える 1

3

sp_executesqlを使用できます。

DECLARE
  @IntVariable    int,
  @SQLString      nvarchar(500),
  @ParmDefinition nvarchar(500)
SELECT
  @IntVariable    = 0,
  @SQLString      = N'SELECT UserName FROM TableUser WHERE UserId=@ValueVariable',
  @ParmDefinition = N'@ValueVariable INT'

SP_EXECUTESQL
  @SQLString,
  @ParmDefinition,
  @ValueVariable = @IntVariable;

本質的には、1回限りのストアドプロシージャを作成します。変数は、ストアドプロシージャで通常表示されるパラメータの@paramDefinition署名であり、SQLサーバーは実行プランなどをキャッシュします。

于 2012-06-15T14:42:41.573 に答える