カーソルを使用して、1つのテーブル(Family_tree)のデータを2つの他のテーブル(Family_tree1 + @time、Family_tree2 + @time)にランダムにコピーしています。コードは正常に実行されますが、行は更新されません。実際にテーブルからコピーするものがあります。 Microsoft SQL Server Management Studioを使用しています。カーソル付きスクリプトの部分は次のとおりです。T-SQLのカーソルが機能しない
---creating two tables beforehand
DECLARE @random int
DECLARE
@first_name nvarchar(20),
@last_name AS nvarchar(20),
@date_of_birth AS nchar(10),
@date_of_death AS nchar(10),
@place_of_death AS nvarchar(30),
@credit_card AS nchar(16),
@ID_member AS int,
@FK_gender AS nchar(3),
DECLARE curs CURSOR FOR SELECT first_name, last_name, date_of_birth, date_of_death, place_of_death, credit_card, ID_member, FK_gender, FROM Family_tree
OPEN curs
FETCH NEXT FROM curs INTO @first_name, @last_name, @date_of_birth, @date_of_death, @place_of_death, @credit_card, @ID_member, @FK_gender,
WHILE @@FETCH_STATUS = 0
BEGIN
SET @random = RAND() * 1000000
IF @random % 2 = 1
BEGIN
SET @sqlString = 'INSERT INTO [Family_tree1' + @time + '] (first_name, last_name, date_of_birth, date_of_death, place_of_death, credit_card, ID_member, FK_gender)
VALUES ('
+ @first_name + ',' + @last_name + ',' + @date_of_birth + ',' + @date_of_death + ',' + @place_of_death + ',' + @credit_card + ','
+ CAST(@ID_member AS nvarchar) +','+ @FK_gender + ')'
END
ELSE
BEGIN
SET @sqlString = 'INSERT INTO [Family_tree2' + @time + '] (first_name, last_name, date_of_birth, date_of_death, place_of_death, credit_card, ID_member, FK_gender)
VALUES (' + @first_name + ',' + @last_name + ',' + @date_of_birth + ',' + @date_of_death + ',' + @place_of_death + ',' + @credit_card + ','
+ CAST(@ID_member AS nvarchar) +','+ @FK_gender + ')'
END
EXECUTE(@sqlString)
FETCH NEXT FROM curs INTO @first_name, @last_name, @date_of_birth, @date_of_death, @place_of_death, @credit_card, @ID_member, @FK_gender
END
CLOSE curs
DEALLOCATE curs
END;
私はT-SQLを初めて使用しており、助言をいただけると嬉しいです! ありがとうございます(:
なぜこのためにカーソルが必要ですか?あなたの意見は何ですか?あなたは何を期待していますか? –
ある表から別の表にデータをコピーすることは、カーソルなしで簡単に**できます。 –
そして、これが失敗する理由は、文字列を構築する変数のうちの1つ以上が 'NULL'と' CONCAT_NULL_YIELDS_NULL'を含んでいるため、文字列全体が 'NULL'になります。 –