#sql-server #database
#sql-сервер #База данных
Вопрос:
Позвольте мне начать с извинений, поскольку это может быть глупый вопрос. Предполагается, что у меня есть UPDATE
столбец с uniqueidentifier
типом данных, скажем, столбцы таблицы (id, username, pwd, Uuid), где Uuid
находится uniqueidentifier
столбец.
Этот Uuid
столбец имеет несколько нулевых значений. Я должен обновить это, сгенерировав версию uuid v1 из внешней хранимой процедуры.
Я попробовал что-то вроде приведенного ниже кода, но это не работает. (GetOptimizedUuid SP генерирует Uuid V1)
DECLARE @no INT;
DECLARE @i INT;
SET @no = (SELECT COUNT(id) FROM table1)
SET @i = 0;
WHILE @i < @no
BEGIN
DECLARE @TempUuid TABLE (SeqUuid UNIQUEIDENTIFIER,
OptimizedUuid UNIQUEIDENTIFIER)
INSERT INTO @TempUuid
EXECUTE [dbo].[GetOptimizedUuid]
UPDATE table1
SET Uuid = (SELECT OptimizedUuid
FROM @TempUuid)
WHERE Uuid IS NULL AND LIMIT 1, @no;
SET @i = @i 1;
END
Если в нем 7 записей и только 2 записи имеют значение Uuid, как мне обновить, чтобы оставшиеся 5 записей Uuid имели другое значение? Заранее спасибо!
Комментарии:
1. можете ли вы также поделиться внутри процедуры GetOptimizedUuid?
2. @SerkanArslan Я не должен обновлять из-за политики моей компании, он просто возвращает два варианта идентификаторов uuid, один из которых сгенерирован, а другой оптимизирован для дополнительной безопасности.
Ответ №1:
Вы можете попробовать это.
DECLARE @affectedrows INT;
SET @affectedrows = 1;
WHILE @affectedrows > 0
BEGIN
DECLARE @TempUuid TABLE (SeqUuid UNIQUEIDENTIFIER,
OptimizedUuid UNIQUEIDENTIFIER)
INSERT INTO @TempUuid
EXECUTE [dbo].[GetOptimizedUuid]
UPDATE TOP(1) table1
SET Uuid = (SELECT TOP 1 OptimizedUuid
FROM @TempUuid)
WHERE Uuid IS NULL
SET @effectedeows = @@ROWCOUNT
END
Комментарии:
1. он просто обновляет одну запись за выполнение и выдает эту ошибку: сообщение 512, уровень 16, состояние 1, подзапрос строки 15 вернул более 1 значения. Это не разрешено, когда следует подзапрос =, !=, <, <= , >, >= или когда подзапрос используется как выражение. Оператор был завершен. Есть ли способ это исправить?