Я записал синтаксический анализатор XML, как только это будет намного более трудно записать без рекурсии.
я предполагаю, что можно всегда использовать стек + повторение, но иногда рекурсия настолько изящна.
Это должно работать нормально.
UPDATE table
SET UniqueIdentifierColumn = NEWID()
WHERE ...
Обратите внимание, что выполнение обновления в одном операторе на основе набора заполняет каждую строку другим идентификатором GUID.
CREATE TABLE dbo.HugeTable (
ColID int IDENTITY PRIMARY KEY,
ColGUID uniqueidentifier,
ColInt int
)
DECLARE @ct int
SET @ct = 0
WHILE @ct < 10 BEGIN
SET @ct = @ct + 1
INSERT INTO dbo.HugeTable (ColInt) VALUES (@ct)
END
GO
SELECT COUNT(*) AS Ct FROM dbo.HugeTable
UPDATE dbo.HugeTable
SET ColGUID = NEWID()
WHERE ColID BETWEEN 3 AND 7
SELECT * FROM dbo.HugeTable
Ct
-----------
10
ColID ColGUID ColInt
----------- ------------------------------------ -----------
1 NULL 1
2 NULL 2
3 E45E13D8-CFF0-4FC7-B7C9-1D53E95C502D 3
4 33C3CCBC-B6BB-4CAA-AB10-338AA95F366E 4
5 82136767-396E-4B33-B9DD-FFD30FCF4680 5
6 EFA24EC9-F8F9-47CF-839F-D588F69D167F 6
7 546F7C14-BDDA-4226-B45C-B0DDCD43E7DB 7
8 NULL 8
9 NULL 9
10 NULL 10
Чтобы добавить столбец типа UNIQUEIDENTIFIER с ограничением по умолчанию и сразу же заполнить значения, используйте что-то вроде:
ALTER TABLE dbo.Accounts
ADD NewColumn UNIQUEIDENTIFIER
CONSTRAINT DF_T_Account_NewColumn DEFAULT (newsequentialid()) WITH VALUES
Если у вас уже есть столбец в таблице и вам просто нужно вставить значения, используйте:
UPDATE dbo.Accounts
SET NewColumn = newid()
WHERE NewColumn IS NULL
Но я совершенно не понимаю, что вы подразумеваете под «выбором только средних значений» - поясните, пожалуйста.
Marc