通过调用存储过程更新 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