【问题标题】:SQL Server: Returning UniqueIdentifier, Operand type clash: uniqueidentifier is incompatible with intSQL Server:返回 UniqueIdentifier,操作数类型冲突:uniqueidentifier 与 int 不兼容
【发布时间】:2017-09-16 13:56:29
【问题描述】:

我在尝试从存储过程返回唯一标识符时遇到此错误 - 有什么想法吗?

操作数类型冲突:uniqueidentifier 与 int 不兼容

代码:

CREATE PROCEDURE TEST
AS
    RETURN NEWID()

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    存储过程只能“返回”INT(它的本意是用作状态码)。如果您想从存储过程中获取其他数据,您应该SELECT 它。从进行调用的代码中访问该数据可能会有些不同,但这就是您必须这样做的方式。

    例如:

    CREATE PROCEDURE Test
    AS
        SELECT NEWID()
    

    【讨论】:

    • 或者,返回一个或多个不带参数的值,重点是存储过程不是标量函数。
    • @DanGuzman,是的,OUT 参数也可以工作,但通常使用起来更复杂(主要是因为它们不像SELECT 那样经常使用)。
    【解决方案2】:

    SQL Server 中的过程不返回值。 . .好吧,有一个隐含的整数状态,但这不是你想要的。

    也许你打算:

    CREATE PROCEDURE TEST (
        @out_id uniqueidentifier output
    )
    AS
    BEGIN
        SET @out_id = NEWID();
    END;
    

    或者,也许你想定义一个函数:

    CREATE FUNCTION TEST
    RETURNS uniqueidentifier
    BEGIN
        RETURN NEWID();
    END;
    

    但是,我不相信你真的能做到这一点,因为newid() 被认为有副作用——而这在 SQL Server 函数中是不允许的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多