通过调用存储过程更新 table 的空记录会引发错误 'Subquery returned more than one value'
Updating Null records of a table by invoking stored procedure throws error 'Subquery returned more than one value'
我正在尝试使用 Uuid(在存储过程 GetOptimizedUuid
的帮助下生成)更新列的所有空值。这样做时出现错误
Subquery returned more than 1 value
我能理解错误的原因,但 none 我的修复帮助了我。
我尝试了一些循环,但没有解决
BEGIN
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 [Sample].[dbo].[GetOptimizedUuid]
UPDATE table1
SET col2 = (SELECT OptimizedUuid FROM @TempUuid)
WHERE col2 IS NULL;
SET @i = @i + 1;
END
END
帮我解决一下,谢谢!
不完全确定您在做什么 - 您需要如何调用此 GetOptimizedUuid
存储过程?您不能只使用 NEWID()
来获取新的 GUID 吗?
无论如何——假设你有调用这个存储过程,我假设你会在循环之前调用它一次,得到您需要的 ID - 然后您从 table 获得顶部 (1) UUID 并更新数据库中的一行 table - 然后您还需要 remove 你刚刚从临时使用的 UUID table,否则你会一遍又一遍地重复使用相同的 ID....
尝试这样的事情:
BEGIN
DECLARE @no INT;
DECLARE @i INT;
SET @no = (SELECT COUNT(id) FROM table1)
SET @i = 0;
-- define and fill the table *ONCE* and *BEFORE* the loop
DECLARE @TempUuid TABLE(SeqUuid UNIQUEIDENTIFIER, OptimizedUuid UNIQUEIDENTIFIER)
INSERT INTO @TempUuid
EXECUTE [Sample].[dbo].[GetOptimizedUuid]
-- declare a UUID to use
DECLARE @NewUuid UNIQUEIDENTIFIER;
WHILE @i < @no
BEGIN
-- get the first UUID from the temp table
SELECT TOP (1) @NewUuid = OptimizedUuid
FROM @TempUuid;
-- update your table
UPDATE table1
SET col2 = @NewUuid
WHERE col2 IS NULL;
-- *REMOVE* that UUID that you've used from the table
DELETE FROM @TempUuid
WHERE OptimizedUuid = @NewUuid;
SET @i = @i + 1;
END
END
我正在尝试使用 Uuid(在存储过程 GetOptimizedUuid
的帮助下生成)更新列的所有空值。这样做时出现错误
Subquery returned more than 1 value
我能理解错误的原因,但 none 我的修复帮助了我。
我尝试了一些循环,但没有解决
BEGIN
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 [Sample].[dbo].[GetOptimizedUuid]
UPDATE table1
SET col2 = (SELECT OptimizedUuid FROM @TempUuid)
WHERE col2 IS NULL;
SET @i = @i + 1;
END
END
帮我解决一下,谢谢!
不完全确定您在做什么 - 您需要如何调用此 GetOptimizedUuid
存储过程?您不能只使用 NEWID()
来获取新的 GUID 吗?
无论如何——假设你有调用这个存储过程,我假设你会在循环之前调用它一次,得到您需要的 ID - 然后您从 table 获得顶部 (1) UUID 并更新数据库中的一行 table - 然后您还需要 remove 你刚刚从临时使用的 UUID table,否则你会一遍又一遍地重复使用相同的 ID....
尝试这样的事情:
BEGIN
DECLARE @no INT;
DECLARE @i INT;
SET @no = (SELECT COUNT(id) FROM table1)
SET @i = 0;
-- define and fill the table *ONCE* and *BEFORE* the loop
DECLARE @TempUuid TABLE(SeqUuid UNIQUEIDENTIFIER, OptimizedUuid UNIQUEIDENTIFIER)
INSERT INTO @TempUuid
EXECUTE [Sample].[dbo].[GetOptimizedUuid]
-- declare a UUID to use
DECLARE @NewUuid UNIQUEIDENTIFIER;
WHILE @i < @no
BEGIN
-- get the first UUID from the temp table
SELECT TOP (1) @NewUuid = OptimizedUuid
FROM @TempUuid;
-- update your table
UPDATE table1
SET col2 = @NewUuid
WHERE col2 IS NULL;
-- *REMOVE* that UUID that you've used from the table
DELETE FROM @TempUuid
WHERE OptimizedUuid = @NewUuid;
SET @i = @i + 1;
END
END