我有
等现有记录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循环执行此操作,我不想使用游标。
修改 在接受的答案中提供了循环放弃作为一种更简单的解决方案。
答案 0 :(得分:19)
首先,我想说我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
答案 1 :(得分:12)
假设ID
是一个标识列:
INSERT INTO TheTable(HospitalID, Email, Description)
SELECT 32, Email, Description FROM TheTable
WHERE HospitalID <> 32
尽量避免使用SQL循环。试着用集合来思考。