- PR -

動的SQLへのパラメータセット

1
投稿者投稿内容
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-12-02 09:52
こちらの会議室では初めての投稿となります。
宜しくお願い致します。

SQLServer2000でのストアドプロシージャー内での「動的SQL」
についてですが,過去ログと「sp_executesql」をキーワードに
調べてみて以下のコードを記述したのですが,思うような
動作をしません。(経験値はこれが始めてのストアド程度です)

========================================================================
DECLARE 各種宣言〜〜
★略:一定の間Loopさせます

FETCH NEXT FROM colKensin --FETCHの作成と1行目の読み込み
INTO @SuisenNo,
@KensinYM,
@Sisin,
@CalcSuiryo

SET @Parm_nSisin = 'ZenSisin' + @CN
SET @Parm_nSuiryo = 'ZenSuiryo' + @CN

BEGIN
SET @Parm_Sisin = N'@p_Sisin int'
SET @Parm_CalcSuiryo = N'@p_CalcSuiryo int'
SET @Parm_SuisenNo = N'@p_SuisenNo char(7)'
SET @Parm_paraYM = N'@p_paraYM char(6)'

SET @SQL = N' UPDATE [tbl_Kensin]
SET '+ @Parm_nSisin +' = @p_Sisin, '+ @Parm_nSuiryo +' = @p_CalcSuiryo
WHERE SuisenNo = @p_SuisenNo AND KensinYM = @p_paraYM '

EXECUTE sp_executesql @SQL,
@Parm_Sisin,
@Parm_CalcSuiryo,
@Parm_SuisenNo,
@Parm_paraYM,
@p_Sisin=@Sisin,
@p_CalcSuiryo=@CalcSuiryo,
@p_SuisenNo=@SuisenNo,
@p_paraYM=@paraYM
END
=========================================================================

動的SQLに関してですが,上記コードでいうと @p_Sisin については
別に動的SQLにしなくてもFETCHで取得した変数を直接指定すれば動作するが,
列名などに変数を使用できない為,動的SQLにする必要がある。と理解(誤解?)
したので動的SQLの作成をしました。

ステップインしてみたところ @p_Sisin,@p_CalcSuiryoなどにNullがセット
されているようで(@Sisin,@CalcSuiryoなどは数値が取得されています)
それが原因の一つだとは思うのですが,もっと大きな間違いをしている
と・・・。

文法的(根本的)間違いも含めご指摘頂ければと思います。
又,提示内容に不備などがあれば合わせてご指摘ください。
宜しくお願い致します
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-12-02 17:35
上記の件,文法ミスを修正して解決しました。
1

スキルアップ/キャリアアップ(JOB@IT)