3

3つのパラメーターを受け入れるストアドプロシージャがあります。

クエリを入力としてこのストアドプロシージャを呼び出すことは可能ですか?

例として、私は持っていtableAます。

SELECT * FROM TABLEA 

| A | B | C |
|---+---+---|
| 1 | 2 | 3 |
| 4 | 5 | 6 |

今、私が呼び出すことができる方法はありますか

EXEC sp_name (SELECT * FROM TABLEA) 

ストアドプロシージャが各行に対して実行されるように?

この背後にある私の理由は、複数の行に対して呼び出す必要のあるストアドプロシージャがあることです。これを行うためのスクリプトを作成できますが、TSQLでそれを実行できるかどうかを知りたいです。

4

3 に答える 3

1

これを実現する最良の方法は、代わりに2番目のストアドプロシージャをユーザー定義関数として作成することです。次に、次のように呼び出すことができます。

SELECT * 
FROM TableA
CROSS APPLY dbo.yourUserFunction(column1, column2, etc)

または、両方のストアドプロシージャを1つのセットに結合する方法があるかもしれませんが、2番目のストアドプロシージャに何が含まれているかを確認する必要があります。

于 2012-09-28T16:15:52.420 に答える
1

このソリューションは、T-SQLがSQLSERVER2008以降で実行されていることを前提としています。

  1. USE YOURDBNAME; テーブルタイプ変数を作成します 。これは1回だけ実行する必要があります。 Create TYPE TableAType as Table (A int null,B int null, C int null); これにより、現在使用しているDBのユーザー定義テーブルタイプにテーブルタイプ変数が作成されます。

  2. ストアドプロシージャで、このテーブルタイプの変数を宣言します。表Aの内容を入力します。例:

    Create Procedure MyStoredProcedure1 AS Declare @TableB as TableAType; 
    Insert into @TableB(A,B,C) Select A,B,C from TableA;
    
  3. メインのストアドプロシージャを作成します

    Create Procedure MyStoredProcedure2
    @TVP TableAType READONLY
    as 
    EXEC sp_Name @TVP; 
    

これで問題が解決するはずです。詳細については、以下のリンクを参照してください。# http://msdn.microsoft.com/en-us/library/bb510489%28v=sql.105%29.aspx

于 2013-07-16T11:24:14.923 に答える
0

技術的にはそうですが、sprocへの呼び出しの形式が正しくありません。

Exec sp_name 'SELECT * FROM TABLEA' 

また

Exec sp_name @sql1 = 'SELECT * FROM TABLEA' 

そうは言っても、あなたがやろうとしていることは良い考えではないかもしれません。

于 2012-09-28T16:03:25.803 に答える