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

Встреча здесь проблемы. Поле [media_id] автоматически генерируется при вставке записи через sql. Поэтому статус 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 
Смежные вопросы