2010-01-11 33 views
5

Tôi có thể trả về UNIQUEIDENTIFIER từ một thủ tục lưu sẵn sử dụng câu lệnh RETURN hay chỉ bằng cách sử dụng câu lệnh OUTPUT?Máy chủ SQL: Trả về bộ định danh duy nhất từ ​​thủ tục lưu sẵn

tức là để trả lại PersonID UNIQUEIDENTIFIER:

CREATE PROCEDURE CreatePerson 
    @Name NVARCHAR(255), 
    @Desc TEXT 
AS 
DECLARE @Count INT 
DECLARE @JobFileGUID UNIQUEIDENTIFIER 

-- Check if job exists? 
SET @Count = (SELECT COUNT(Name) AS Name FROM Person WHERE [email protected]) 

IF @Count < 1 
BEGIN 
    SET @PersonGUID = NEWID(); 

    INSERT INTO Person 
     (PersonID, Name, [Desc]) 
     VALUES (@PersonGUID, @Name, @Desc) 

END 

    SELECT @PersonGUID = Person.PersonID 
    FROM Person 
    WHERE Name = @Name 

    RETURN @PersonGUID 
GO 

Cảm ơn

Trả lời

5

Trong thủ tục lưu trữ - chỉ sử dụng câu lệnh OUTPUT. Trong hàm - trả về.

+0

nghĩ đó là trường hợp ... cảm ơn – Belliez

+0

Chết tiệt. Tôi đặc biệt cần một PROC hoặc CHỨC NĂNG mà sẽ làm một INSERT và trực tiếp trả về một giá trị uniqueidentifier (thay vì phải sử dụng một tham số OUTPUT). –

5

Sử dụng:

CREATE PROCEDURE CreatePerson 
    @Name NVARCHAR(255), 
    @Desc TEXT, 
    @PersonGUID UNIQUEIDENTIFIER OUTPUT 
AS 
BEGIN 

    SET @PersonGUID = ... 

END 

Làm thế nào để gọi:

DECLARE 
    @name NVARCHAR(255), 
    @desc TEXT, 
    @personGUID UNIQUEIDENTIFIER 

SET @name = 'Bob' 
SET @desc = 'One handsome man.' 

EXEC [Database].[schema].CreatePerson @name, @desc, @personGUID OUTPUT 
-2
CREATE TABLE [dbo].[tbl_Clients]([ClientID] [uniqueidentifier] NULL, [ClientName] varchar NULL, [ClientEnabled] [bit] NULL) ON [PRIMARY] 

GO 

CREATE PROCEDURE [dbo].[sp_ClientCreate] @in_ClientName varchar(250) = "New Client 123", @in_ClientEnabled bit, @out_ClientId uniqueidentifier OUTPUT AS 

SET @out_ClientId = NEWID(); 

INSERT INTO tbl_Clients(ClientId, ClientName, ClientEnabled) VALUES(@out_ClientId, @in_ClientName, @in_ClientEnabled) 

DECLARE @return_value int, @out_ClientId uniqueidentifier 

EXEC @return_value = [dbo].[sp_ClientCreate] @in_ClientName = N'111', @in_ClientEnabled = 1, @out_ClientId = @out_ClientId OUTPUT 

SELECT @out_ClientId as N'@out_ClientId' 

SELECT 'Return Value' = @return_value 

GO 

Kết quả: -59A6D7FE-8C9A-4ED3-8FC6-31A989CCC8DB

Các vấn đề liên quan