2016-11-08 18 views
1

私はclientsという3つのパラメータを持つストアドプロシージャを持っています。最初はユーザー入力用、最後の2つはOUTPUTパラメータです。ストアドプロシージャを別のストアドプロシージャから実行して2つの変数を返す

これはコードです:

CREATE PROCEDURE clients 
    (@name NVARCHAR(100), 
     @id_client int OUTPUT, 
     @messg varchar(1) OUTPUT) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    BEGIN TRY 
    BEGIN TRAN 
     IF NOT EXISTS (SELECT name FROM client WHERE name = @name) 
     BEGIN 
      INSERT INTO client(name) VALUES (@name); 

      SET @id_client = SCOPE_IDENTITY(); 
      SET @messg = 'o' 

      COMMIT TRAN 
     END 
     ELSE 
     BEGIN 
      SELECT @id_client = id_client 
      FROM client 
      WHERE name = @name; 

      SET @messg = 'o' 

      COMMIT TRAN 
     END 
    END TRY 
    BEGIN CATCH 
     SET @messg = 'e' 
     ROLLBACK TRAN 
    END CATCH 
END 

私は二番目がupdateSと呼ばれる別のから、このストアドプロシージャを呼び出す必要があり、私は次のことをしようとしている:

CREATE PROCEDURE updateS 
    (@clientname VARCHAR(100)) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @id INT; 
    DECLARE @msg VARCHAR(1); 

    EXEC clients @clientname, @id, @msg; --Problem here to retrieve the id 
END 

このストアドプロシージャクライアントの名前のパラメータがありますが、クライアントのIDを取得する必要がありますが、試行しているようには機能しません。

基本的には、IDを取得して2番目のストアドプロシージャで使用する必要があります。

質問に対するコメント投稿あなたはそれを定義するときにだけでなく、ストアドプロシージャを実行するときOUTPUTを指定する必要が

答えて

3

EXEC clients @clientname, @id OUTPUT, @msg OUTPUT; 
+0

のようにパラメータを作成します。それは私が必要としたものです。どうもありがとう。 – TimeToCode

1

は、ストアドプロシージャにパラメータを渡すながらoutputキーワードを逃しましたか?また、clientsストアドプロシージャを変更して、というよりもむしろ@messg char(1) OUTPUT

+0

私はあなたの答えを感謝します、なぜ私は 'char'代わりに' varchar'を使用する必要がありますか?それはパフォーマンスや別の理由によるものですか? SQL Serverを初めて使用しています。 – TimeToCode

+1

@TimeToCode、はい、パフォーマンス用です。あなたのコンテンツは固定されているので(1文字のみ)、より良いパフォーマンスが得られます。 http://stackoverflow.com/questions/1885630/whats-the-difference-between-varchar-and-charを参照してください。 – Rahul

関連する問題