To clarify the re comments, the table expression in the USING clause of the MERGE operator.
The following actions will not work, because it will evaluate each row :
MERGE INTO FavoriteFruits USING ( SELECT NAME, NEWID() AS GUID FROM FavoriteFruits GROUP BY NAME ) AS source ON source.NAME = FavoriteFruits.NAME WHEN MATCHED THEN UPDATE SET GUID = source.GUID;
But the following, using a table variable, will work:
DECLARE @n TABLE ( NAME VARCHAR(10) NOT NULL UNIQUE, GUID UNIQUEIDENTIFIER NOT NULL UNIQUE ); INSERT INTO @n (NAME, GUID) SELECT NAME, NEWID() FROM FavoriteFruits GROUP BY NAME; MERGE INTO FavoriteFruits USING @n AS source ON source.NAME = FavoriteFruits.NAME WHEN MATCHED THEN UPDATE SET GUID = source.GUID;
onedaywhen
source share