0

nvarchar プロパティを MAX に設定してもテキストが切り捨てられる非常に長いインライン クエリがあります。sp_executesql が代わりに varchar を受け取るようにする方法はありますか。

nvarchar を varchar に変更しようとすると、エラーが発生します。ntext も試しましたが、結果は同じです。

編集:

回答に投稿された質問で私が読んだことに基づいて、これはうまくいくはずですが、誰も私に理由を教えてくれませんか?

    Declare @X varchar(MAX)
    SET @X = N'Select * From Users'
    Execute sp_executesql @X

これは問題なく動作しますが:

    Execute sp_executesql N'Select * From Users'
4

1 に答える 1

1

いいえsp_executesql、@stmt および @params パラメーターには nvarchar が必要です

パラメータは nvarchar である必要はありません。

varchar パラメータを指定して sp_executesql を呼び出すを参照してください。

nvarchar(max) が切り捨てられている場合は、連結が間違っています。Nvarchar(Max) については、TSQL で 4000 文字しか取得できませんか? を
参照してください。なぜ

sp_executesql のポイントは、とにかく文字列の作成を避けることです。これにより、実行プランの再利用のために固定クエリをパラメーター化できます。連結して文字列を作成するのはなぜですか?

于 2013-02-12T08:48:58.857 に答える