2010-01-11 5 views
5

RETURN 문을 사용하여 저장 프로 시저에서 UNIQUEIDENTIFIER를 반환 할 수 있습니까? 아니면 OUTPUT 문을 통해서만 가능합니까?SQL Server : 저장 프로 시저에서 uniqueidentifier를 반환

즉는 PersonID 고유 식별자를 반환합니다 :

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 

감사

저장 프로 시저에서

답변

5

을 - 오직 OUTPUT 문을 사용하여. 함수에서 - 리턴.

+0

생각 ... 덕분에 – Belliez

+0

젠장. 필자는 특히 INSERT를 수행하고 OUTPUT 매개 변수를 사용하지 않고 uniqueidentifier 값을 직접 반환하는 PROC 또는 FUNCTION이 필요했습니다. –

5

사용 : 호출하는 방법을

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

    SET @PersonGUID = ... 

END 

:

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 

결과 : 사건이었다 -59A6D7FE - 8C9A - 4ED3-8FC6-31A989CCC8DB

관련 문제