次のような既存のレコードがあります
ID Hospital ID Email Description
1 15 [email protected] Sample Description
2 15 [email protected] Random Text
WHILEループを使用して、病院IDが特定の値(この場合は32)に変更される行を挿入する必要がありますが、その他(自動生成されるIDではない)は一定のままです。
それは次のようになります
ID Hospital ID Email Description
1 15 [email protected] Sample Description
2 15 [email protected] Random Text
3 32 [email protected] Sample Description
4 32 [email protected] Random Text
上記には、IDと病院IDが異なる2つの新しい行があります。 IDは自動生成されます。
同じ更新を行う必要のあるテーブルがいくつかあります。 whileループでこれを行うことができる場合、カーソルは使用しません。
[〜#〜] edit [〜#〜]より単純な解決策として受け入れられた回答でwhileループが放棄されました。
ID
がID列であると仮定すると:
INSERT INTO TheTable(HospitalID, Email, Description)
SELECT 32, Email, Description FROM TheTable
WHERE HospitalID <> 32
SQLのループを回避してください。代わりにセットの観点から考えてみてください。
まず第一に、ほとんどの場合、特に本番環境ではSQLのループを回避する必要があるというジョン・サンダースに100%同意します。
しかし、時々、テスト目的でテーブルに100個のレコードを入力することは、ループを使用するのにふさわしいことです。
たとえば、病院のIDが16〜100のレコードをテーブルに入力し、使用した電子メールと説明を明確にする場合
CREATE PROCEDURE populateHospitals
AS
DECLARE @hid INT;
SET @hid=16;
WHILE @hid < 100
BEGIN
INSERT hospitals ([Hospital ID], Email, Description)
VALUES(@hid, 'user' + LTRIM(STR(@hid)) + '@mail.com', 'Sample Description' + LTRIM(STR(@hid)));
SET @hid = @hid + 1;
END
そして結果は
ID Hospital ID Email Description
---- ----------- ---------------- ---------------------
1 16 [email protected] Sample Description16
2 17 [email protected] Sample Description17
...
84 99 [email protected] Sample Description99