3

nvarcharまたはntextに格納されているSQLステートメントを実行し、sp_executesqlを使用せずに実行されたSQLステートメントの結果をパラメーター化する方法はありますか?例えば

@SQL = 'SELECT name FROM db.dbo.employees WHERE income > 50000'

この場合、ストアドプロシージャで、クエリを変更せずに名前を抽出して、nameに定義されたOUTPUTパラメータでsp_executesqlを使用できるようにすることはできますか?

4

2 に答える 2

4

SP_EXECUTESQL の使用を妨げているものは何ですか? これはディルバートのストリップですか?

とにかく、その特定のクエリで出力パラメーターを使用した場合、収入が 50,000 を超えるすべての従業員から 1 つの (ランダムな) 値が返される可能性が高くなります。動的 SQL ステートメントの呼び出し元に結果全体を返す方法を示す例を次に示します。

ここで重要なのはINSERT..EXEC です。

create table dbo.employees (
  name varchar(10),
  income int);
insert employees values
 ('john', 10000),
 ('joe' , 20000),
 ('joey', 40000),
 ('bob' , 70000),
 ('tim' , 100000);

declare @SQL nvarchar(max) =
    'SELECT name FROM dbo.employees WHERE income > 50000';

declare @names table (name varchar(20));
insert @names
EXEC (@SQL);
select * from @names;
于 2012-10-13T05:23:26.357 に答える
0

これは、パラメータ化された SQL クエリを使用して SQL サーバーで完全に動的な SQL を使用する方法の例です。

SET @Sql = N'UPDATE ' + @tablen + ' SET LOSS_SCORE=0.00, EARNED_SCORE=0.00  WHERE SECTIONSUBTYPE_CODE!=''NW'' AND 
BATCH_IDENTITY ='''+@BATCH_IDENTIFIER+''' AND PACK_NO IN (SELECT PACK_NO FROM ' + @tablen + ' WHERE 
BATCH_IDENTITY =''' +@BATCH_IDENTIFIER+''' AND ECTIONSUBTYPE_CODE=''NW'' AND LOSS_SCORE=100.00)'
EXECUTE sp_executesql @Sql

私は自分のプロジェクトで使用しましたが、正常に動作しています。それがあなたにも役立つことを願っています。

于 2016-11-29T12:39:11.667 に答える