web-dev-qa-db-ja.com

ストアドプロシージャでストアドプロシージャ(2つのパラメーター)を呼び出す方法は?

同じパラメーター(サーバー名と日付)を持つストアドプロシージャがあります。ストアドプロシージャを記述して、そのSP(SP_Allと呼ばれる)で実行します。

CREATE PROCEDURE [dbo].[SP_All]
AS
BEGIN
exec sp_1   @myDate datetime, @ServerName sysname
exec sp_2   @myDate datetime, @ServerName sysname
exec sp_3   @myDate datetime, @ServerName sysname
exec sp_4   @myDate datetime, @ServerName sysname
END
Go 

エラー:スカラー変数 "@myDate"を宣言する必要があります。

10
Raha

ここに2つの問題があります。

  1. プロシージャは明らかに@myDate@ServerNameの2つのパラメータを受け取りますが、これらはまだ宣言していません。これを行うには、プロシージャ名とASの間に名前とタイプを追加します。
  2. Sp_1からsp_4を呼び出すときに、パラメーターのデータ型を再度指定する必要はありません(宣言によって処理されます。ポイント1を参照してください)。

    CREATE PROCEDURE [dbo].[SP_All]
        @myDate datetime,
        @ServerName sysname
    AS
    BEGIN
        exec sp_1 @myDate, @ServerName
        exec sp_2 @myDate, @ServerName
        exec sp_3 @myDate, @ServerName
        exec sp_4 @myDate, @ServerName
    END
    
9
Heinzi

これを試してください-

CREATE PROCEDURE [dbo].[SP_All]

       @myDate DATETIME
     , @ServerName SYSNAME

AS BEGIN

     EXEC dbo.sp_1 @myDate, @ServerName
     EXEC dbo.sp_2 @myDate, @ServerName
     EXEC dbo.sp_3 @myDate, @ServerName
     EXEC dbo.sp_4 @myDate, @ServerName

END
4
Devart

ストアドプロシージャを間違った方法で実行している

exec sp_1 @myDate datetime, @ServerName sysname

構文は完全に間違っています。

パラメータを使用してストアドプロシージャを実行する必要がある場合は、最初にパラメータを宣言して渡します。

declare @myDate datetime
declare @ServerName sysname

exec sp_1 @myDate, @ServerName

これが正しいアプローチです。

1
Bibek Gautam