簡體   English   中英

SQL Server 2008使用WHILE LOOP插入

[英]SQL Server 2008 Insert with WHILE LOOP

我有現有的記錄

ID    Hospital ID     Email                Description 
1       15         abc@e.com           Sample Description
2       15         def@dd.com          Random Text

我需要使用WHILE循環來插入醫院ID更改為特定值的行或在這種情況下為32,而其他(不是ID,因為它是自動生成的)保持不變。

它應該看起來像

ID    Hospital ID     Email                Description 
1       15         abc@e.com           Sample Description
2       15         def@dd.com          Random Text
3       32         abc@e.com           Sample Description
4       32         def@dd.com          Random Text

請注意,上面現在有兩個ID與醫院ID不同的新行。 ID是自動生成的。

我有幾個表,我需要進行相同的更新。 如果我可以使用while循環執行此操作,我不想使用游標。

編輯在接受的答案中提供了循環作為更簡單的解決方案。

首先,我想說我100%同意John Saunders,在大多數情況下尤其是在生產中你必須避免使用SQL循環。

但偶爾作為一次性的事情來填充一個帶有一百條記錄的表用於測試目的恕我直言,放縱自己使用循環是可以的。

例如,在您的情況下,使用16到100之間的醫院ID的記錄填充您的表格,並使電子郵件和描述與您可以使用的不同

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          user16@mail.com  Sample Description16 
2    17          user17@mail.com  Sample Description17 
...                                                    
84   99          user99@mail.com  Sample Description99 

假設ID是標識列:

INSERT INTO TheTable(HospitalID, Email, Description)
SELECT 32, Email, Description FROM TheTable
WHERE HospitalID <> 32

盡量避免使用SQL循環。 試着用套裝來思考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM