SQL Server 2008 使用 WHILE LOOP 插入
Posted
技术标签:
【中文标题】SQL Server 2008 使用 WHILE LOOP 插入【英文标题】:SQL Server 2008 Insert with WHILE LOOP 【发布时间】:2013-02-17 09:56:35 【问题描述】:我有类似的现有记录
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 循环来做到这一点,我不想使用光标。
编辑 已接受的答案中提供了废弃的 while 循环作为更简单的解决方案。
【问题讨论】:
你有没有尝试过? 当然。我不知道如何编写插入查询。我尝试用@@RowCount 声明@hospitalid int 和while 循环。 在这里输入一些代码。HospitalID
的值是从哪里来的?
我正在自己设置新的 HospitalID。硬编码。
【参考方案1】:
假设ID
是一个标识列:
INSERT INTO TheTable(HospitalID, Email, Description)
SELECT 32, Email, Description FROM TheTable
WHERE HospitalID <> 32
尽量避免 SQL 循环。试着用集合来思考。
【讨论】:
这行得通。谢谢你。不过只是好奇地学习,你能想出一种方法来处理 WHILE LOOP 吗?这是否意味着创建一个临时表来存储临时值? 我永远不会使用WHILE
循环。每当我发现自己在使用这样的代码时,我就会停止我正在做的事情并重新开始。【参考方案2】:
首先我想说的是,我 100% 同意 John Saunders 的观点,即在大多数情况下,尤其是在生产环境中,您必须避免 SQL 中的循环。
但有时为了测试目的而用一百条记录填充表是一次性的,恕我直言,放纵自己使用循环是可以的。
例如,在您的情况下,用医院 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 user16@mail.com Sample Description16
2 17 user17@mail.com Sample Description17
...
84 99 user99@mail.com Sample Description99
【讨论】:
接受的答案稍作修改就可以满足我的要求。我并没有试图增加 HospitalID。我的问题显示了我想要得到的示例。 @TejaswiRana 该问题显示了示例,但背后没有意图。如果您愿意,可以在我的示例中为 HospitalID32
使用 const 值。但是,如果您想在更改一列的值的同时完全复制现有记录集,那么@JohnSaunders 的解决方案是最好的选择。以上是关于SQL Server 2008 使用 WHILE LOOP 插入的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008 中的 While 循环遍历日期范围,然后插入
您如何使用 SQL Server CE 和 SQL Server 2008 Express?
使用 SQL Server 2008 和 SQL Server 2005 和日期时间