0

mssql のストア プロシージャ (SP) に問題があります。私が持っているのは、列の1つにSP名が含まれているテーブルであり、そのSP名を取得してSP内でそのSPを実行する必要があります。

だから私がやったこと:

  1. 私はSPを持っています - わかりました
  2. テーブル内の SP から SP 名を取得する SP の名前で変数を宣言します - OK

.

DECLARE @rs varchar(max)
DECLARE @sql varchar(max) = N'usp_GetSP)'
EXECUTE sp_executesql @sql, @rs output
EXECUTE @rs

ここで、EXECUTE sp_executesql @sql を実行すると SP 名が取得されることはわかっていますが、@rs についてはわかりません。次のエラーが表示されます。

メッセージ 214、レベル 16、状態 2、プロシージャ sp_executesql、行 1 プロシージャは、タイプ 'ntext/nchar/nvarchar' のパラメータ '@statement' を想定しています。メッセージ 2812、レベル 16、状態 62、行 4 ストアド プロシージャ '' が見つかりませんでした。

  1. 私が戻ってきたそのSPを実行してください - ここに問題があります

これは 3 つのSELECTステートメントを含む SP でUNIONあり、この SP は作業に必要な3 番目の 1 秒UNION(最後のステートメント) です。SELECT

どうすればこれができるか知っている人はいますか?

4

1 に答える 1

0

For Error Message:@sqlvarchar ではなく nvarchar として宣言する必要があると思います。

あなたの場合、@sql を varchar 型として定義したため、割り当てる nvarchar 値 (N'usp_GetSP') は varchar に変換されます。

DECLARE @rs nvarchar(max)
DECLARE @sql nvarchar(max) = N'usp_GetSP' --not sure why you have ')'
EXECUTE sp_executesql @sql, @rs output
EXECUTE ( @rs )

パラメータを使用する方法については、このリンクも確認してくださいOUTPUTsp_exeutesql

于 2013-02-26T13:42:42.823 に答える