マッピングテーブル(BcwmWDConfig
)を読み込み、古いデータベース(BCWM99
)の古いテーブル(Items
)の値を別のデータベースの新しいテーブル(WebDET99.dbo.Items
)に挿入/更新するコードスニペットを書きました。スカラー変数がカーソル内で宣言されていないのはなぜですか?
私はおそらく私が宣言した(少なくとも私はそう思った)変数は宣言されていないというエラーを受けています。
DECLARE @v_bcwm_id INT = 0,
@v_wd_guid VARCHAR = '';
DECLARE bcwm_config_read_cursor CURSOR FOR
SELECT c.id, c.guid
FROM BcwmWDConfig c
WHERE c.guid IS NOT NULL;
PRINT '----READING CONFIG----';
OPEN bcwm_config_read_cursor
FETCH NEXT FROM bcwm_config_read_cursor INTO @v_bcwm_id, @v_wd_guid
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '----READ CONFIG FOR ID: '[email protected]_bcwm_id+' AS GUID '[email protected]_wd_guid+'----'
PRINT '----INSERTING ITEMS WITH PARENT GUID: '[email protected]_wd_guid+'----'
INSERT INTO WebDET99.dbo.Items
SELECT
i.Id, i.Text,
CAST(@v_wd_guid AS VARCHAR(50)),
CAST(i.Linked_Feld AS VARCHAR(50)),
i.Linked_Item, i.Order
FROM
BCWM99.dbo.Items i
WHERE
i.Parent_Feld = @v_bcwm_id
PRINT '----INSERTED ITEMS WITH PARENT GUID: '[email protected]_wd_guid+'-----'
FETCH NEXT FROM bcwm_config_read_cursor INTO @v_bcwm_id, @v_wd_guid
END
CLOSE bcwm_config_read_cursor;
DEALLOCATE bcwm_config_read_cursor;
SET @v_bcwm_id = 0, @v_wd_guid = '';
OPEN bcwm_config_read_cursor
FETCH NEXT FROM bcwm_config_read_cursor
INTO @v_bcwm_id, @v_wd_guid
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '----READ CONFIG FOR ID: '[email protected]_bcwm_id+' AS GUID '[email protected]_wd_guid+'----'
PRINT '----UPDATING ITEMS WITH LINKED FIELD: '[email protected]_wd_guid+'----'
UPDATE WebDET99.dbo.Items i
SET i.Linked_Feld = @v_wd_guid
WHERE i.Parent_Feld = CAST(@v_bcwm_id AS VARCHAR(50))
PRINT '----UPDATED ITEMS WITH LINKED FIELD: '[email protected]_wd_guid+'-----'
FETCH NEXT FROM bcwm_config_read_cursor
INTO @v_bcwm_id, @v_wd_guid
END
CLOSE bcwm_config_read_cursor;
DEALLOCATE bcwm_config_read_cursor;
SET @v_bcwm_id = 0,
@v_wd_guid = '';
なぜカーソルの中で宣言されていませんか?また、私は自分のコードでいくつかの小さな構文エラーがあると確信していますが、私はSQL Serverに慣れていない、多分誰かがこの手順でいくつかの他の問題を見つける。
質問に誤ってカーソルを2回貼り付けていたのですか、それとも実際に使用していますか? –
エラーメッセージとは何ですか?クイックメモ、更新は挿入できない可能性があります。既存のレコードを更新している場合は、同じカーソルループで更新してください。また、int変数を出力するときに、これらをvsrcharsにキャストする必要があるかもしれません。 –
実行時にテキスト全体を強調表示していますか? –