2013-12-16 40 views
3

我有一個有值這個存儲過程:在SQL Server中檢索特定值

BEGIN TRY 
    BEGIN TRANSACTION; 

    -- Insert statements for procedure here 
    DECLARE @return_value int 
    DECLARE @media_id uniqueidentifier 

    'INSERT SQL STATEMENT HERE 

    SELECT [media_id] FROM [media] WHERE 1 = 1 

    -- One row affected 
    RETURN 1 
END TRY 
BEGIN CATCH 
    IF @@TRANCOUNT > 0 
    BEGIN 
     ROLLBACK TRANSACTION; 
    END 

    -- Rollback, no row affected 
    RETURN 0 
END CATCH;  

我想從另一個調用存儲過程[media_id]值。我如何得到這個價值?

+0

http://stackoverflow.com/a/11743655/284111 –

+0

添加其他代碼。 – javisrk

回答

3

表定義

CREATE TABLE MY_EMPLOYEE 
(EMPID INT, NAME VARCHAR(20), 
LANGUAGEID INT , ID UNIQUEIDENTIFIER DEFAULT NEWID()) 
GO 

存儲過程

ALTER PROCEDURE usp_ProcName 
@Emp_ID INT = null, 
@Name VARCHAR(20) = null, 
@LanguageID int = null, 
@NewID UNIQUEIDENTIFIER OUTPUT 
AS 
BEGIN 
SET NOCOUNT ON; 
    BEGIN TRY 
     BEGIN TRANSACTION; 

     -- Insert statements for procedure here 

     INSERT INTO [Practice_DB].[dbo].[MY_EMPLOYEE](EMPID, NAME, LANGUAGEID) 
     VALUES (@Emp_ID, @Name, @LanguageID); 

     -- Populating the OUTPUT variable using the other variables that were passed 
     -- for INSERT statement. 

     SELECT @NewID = ID 
     FROM [Practice_DB].[dbo].[MY_EMPLOYEE] 
     WHERE EMPID = @Emp_ID 

     -- One row affected 
     COMMIT TRANSACTION 
     RETURN 1 
    END TRY 
BEGIN CATCH 
     IF @@TRANCOUNT > 0 
     BEGIN 
      ROLLBACK TRANSACTION; 
     END 

     -- Rollback, no row affected 
     RETURN 0 
    END CATCH 

END 

GO 

調用存儲過程

DECLARE @value int, @ID VARCHAR(100) 

EXECUTE @value = usp_ProcName 
@Emp_ID = 50, 
@Name = 'John', 
@LanguageID = 50, 
@NewID = @ID OUTPUT --<-- passing this variable with OUTPUT key word this will be 
        -- populated inside the Procedure and then you can SELECT it or 
        -- whatever you want to do with this value. 
SELECT @ID 
SELECT @value 
+0

在這裏遇到問題。通過sql插入記錄時,會自動生成[media_id]字段。所以EXECUTE語句不適用於我,因爲我不需要插入參數。有沒有其他的方式來調用它? – javisrk

+1

@javisrk你沒有給'@ mediaid'傳遞任何值,你只是將一個帶有KEY WORD'OUTPUT'的變量傳遞給參數@mediaid,一旦這個過程被執行,你的傳入變量被填充,你可以選擇它做任何你想做的事如何處理這個變量,不知道你的存儲過程中發生了什麼,我很難告訴你如何填充你的OUTPUT變量。 –

+0

@javisrk我已經創建了一個表格,然後爲它創建了一個存儲過程,它幾乎可以完成您的過程應該做的所有事情,並且希望這會消除您的任何誤解。 –

0

我認爲這應該工作

BEGIN TRY 
    BEGIN TRANSACTION; 

    -- Insert statements for procedure here 
    DECLARE @return_value int 
    DECLARE @media_id uniqueidentifier 
    --get the value from the stored procedure here 
    Declare @SQL varchar(max) 
    set @SQL='INSERT SQL STATEMENT HERE 
    SELECT @media_id FROM [media] WHERE 1 = 1' 
    exec @SQL 

    -- One row affected 
    RETURN 1 
END TRY