我有一个表让我们说FavoriteFruits,有NAME,有FRUIT,和GUID列.该表已经填充了名称和水果.所以我们说:
NAME FRUIT GUID
John Apple NULL
John Orange NULL
John Grapes NULL
Peter Canteloupe NULL
Peter Grapefruit NULL
Run Code Online (Sandbox Code Playgroud)
好的,现在我想GUID用新的GUID(使用NEWID())更新列,但我希望GUID每个不同的名称具有相同的名称.所以我希望所有人都John Smiths拥有相同的东西GUID,我希望两者Peters都有相同的东西GUID,但GUID与用于约翰斯的那个不同.所以现在它看起来像这样:
NAME FRUIT GUID
John Apple f6172268-78b7-4c2b-8cd7-7a5ca20f6a01
John Orange f6172268-78b7-4c2b-8cd7-7a5ca20f6a01
John Grapes f6172268-78b7-4c2b-8cd7-7a5ca20f6a01
Peter Canteloupe e3b1851c-1927-491a-803e-6b3bce9bf223
Peter Grapefruit e3b1851c-1927-491a-803e-6b3bce9bf223
Run Code Online (Sandbox Code Playgroud)
我可以在更新语句中执行此操作而无需使用游标吗?如果是这样,请举个例子?
多谢你们...
更新 CTE将无法正常工作,因为它将按行进行评估.表变量可以工作:
您应该能够使用表变量作为更新数据的源.这是未经测试的,但它看起来像:
DECLARE @n TABLE (Name varchar(10), Guid uniqueidentifier);
INSERT @n
SELECT Name, newid() AS Guid
FROM FavoriteFruits
GROUP BY Name;
UPDATE f
SET f.Guid = n.Guid
FROM @n n
JOIN FavoriteFruits f ON f.Name = n.Name
Run Code Online (Sandbox Code Playgroud)
因此,使用每个名称的GUID填充变量,然后将其连接回原始表并相应地更新.
| 归档时间: |
|
| 查看次数: |
3871 次 |
| 最近记录: |