2013-12-16 42 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