Sql server 如何从存储过程中获取唯一标识符?

Sql server 如何从存储过程中获取唯一标识符?,sql-server,stored-procedures,Sql Server,Stored Procedures,我觉得我离这里太近了,我似乎不知道如何使用存储过程从SQL Server获取GUID。要么没有返回值,要么调用输出的方式不对 在看了两天的文档之后,我得出了以下结论: DROP PROCEDURE IF EXISTS create_product GO CREATE PROCEDURE create_product (@Name VARCHAR(255), @Price DOUBLE PRECISION, @Image VARCHAR(255), @Fr

我觉得我离这里太近了,我似乎不知道如何使用存储过程从SQL Server获取GUID。要么没有返回值,要么调用输出的方式不对

在看了两天的文档之后,我得出了以下结论:

DROP PROCEDURE IF EXISTS create_product
GO

CREATE PROCEDURE create_product 
    (@Name VARCHAR(255),
     @Price DOUBLE PRECISION,
     @Image VARCHAR(255),
     @Free_Shipping BIT,
     @Description VARCHAR(MAX),
     @Shipping_Id UNIQUEIDENTIFIER,
     @PRODUCT_ID UNIQUEIDENTIFIER OUTPUT)
AS
    SELECT @PRODUCT_ID = NEWID();

    DECLARE @PRODUCT_DETAIL_ID UNIQUEIDENTIFIER;
    SET @PRODUCT_DETAIL_ID = NEWID();

    INSERT INTO Product (product_id, product_name, product_price, product_image,
                         product_free_shipping, product_detail_id) 
    VALUES (@PRODUCT_ID, @Name, @Price, @Image,
            @Free_Shipping, NULL);

    INSERT INTO ProductDetail (detail_id, detail_description, detail_product_id,
                               detail_product_meta_id, detail_shipping_id)
    VALUES (@PRODUCT_DETAIL_ID, @Description, @PRODUCT_ID,
            NULL, @Shipping_Id);

    UPDATE Product
    SET product_detail_id = @PRODUCT_DETAIL_ID
    WHERE product_id = @PRODUCT_ID;

    PRINT @PRODUCT_ID
GO

DECLARE @PID UNIQUEIDENTIFIER;

EXEC create_product 'Name8', 10.79, 'Image8', 0, 'Description of the eigth', '0511DE6D-F448-471D-B1B2-11C19E991927', @PID OUTPUT
GO

PRINT @PID
我只是在最后添加了
打印
,以进行调试,以确保确实设置了我的值。我得到的错误是:

味精137,第15级,状态2,第60行
必须声明标量变量“@PID”


这看起来很奇怪

变量的作用域是批次,
GO
是批次分隔符。移除它

DECLARE @PID UNIQUEIDENTIFIER;
EXEC create_product 'Name8', 10.79, 'Image8', 0, 'Description of the eigth', '0511DE6D-F448-471D-B1B2-11C19E991927', @PID OUTPUT
PRINT @PID

变量的作用域是批次,
GO
是批次分隔符。移除它

DECLARE @PID UNIQUEIDENTIFIER;
EXEC create_product 'Name8', 10.79, 'Image8', 0, 'Description of the eigth', '0511DE6D-F448-471D-B1B2-11C19E991927', @PID OUTPUT
PRINT @PID

打印后移动GO语句…打印后移动GO语句。。。