次のストアドプロシージャを実行しようとしています。動的SQLエラー
CREATE PROCEDURE NWR.GRADER
@YEAR AS NVARCHAR(4)
AS
BEGIN
DECLARE @sql1 as nvarchar(500) =
N'select a.*, b.pts as W_GRD_PTS
into nwr.atp_matches_' + @YEAR + N'WGP
from nwr.atp_matches_' + @YEAR + N' a
left join NWR.RNK_VAL as b on a.winner_rank >= low
and a.winner_rank<= high
alter table nwr.atp_matches_' + @YEAR + N'WGP
add L_GRD_PTS smallint null
UPDATE nwr.atp_matches_' + @YEAR + N'WGP
SET L_GRD_PTS = C.pts
FROM NWR.RNK_VAL C
WHERE loser_rank >= LOW AND loser_rank <= HIGH;'
--print (@sql1);
EXEC sys.sp_execute @sql1;
end;
exec nwr.GRADER @year='2016';
私は次のようなエラーに
メッセージ214、レベル16、状態2、プロシージャsp_executeを取得していますが、1行目
手順型 'int型のパラメータ '@handle' を期待しています。
しかし、私はむしろEXECよりも印刷に切り替えるとき、私は、私は以下のように予想されるとおりにコードを取得する:
select a.*, b.pts as W_GRD_PTS
into nwr.atp_matches_2016WGP
from nwr.atp_matches_2016 a
left join NWR.RNK_VAL as b on a.winner_rank >= low and a.winner_rank <= high
alter table nwr.atp_matches_2016WGP
add L_GRD_PTS smallint null
UPDATE nwr.atp_matches_2016WGP
SET L_GRD_PTS=C.pts
FROM NWR.RNK_VAL C
WHERE loser_rank>= LOW AND loser_rank<= HIGH;
誰もが私が間違ってやっているかを説明することはできますか?
それは、このです... EXEC sys.sp_execute @ sql1 ...これは... EXEC sys.sp_execute ** sql ** @ sql1; –
また、DML(データ操作 - 選択、挿入、削除)とDDL(データ定義 - テーブルの変更など)を1つのクエリで混在させるのは悪い考えです。このストアドプロシージャを実行するたびに、新しい列 'L_GRD_PTS'がテーブルに追加されます......実際にはこれは** **一度しか動作しませんし、失敗します....これをしないでください! DDL **をあなたの他のコードから分離してください! –