2012-09-28 46 views
3

我有一個接受三個參數的存儲過程。將查詢結果傳遞到存儲過程

是否可以使用查詢作爲輸入來調用此存儲過程?

作爲一個例子,我有tableA

SELECT * FROM TABLEA 

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

現在,有我可以調用

EXEC sp_name (SELECT * FROM TABLEA) 

使存儲過程將每一行執行的方法嗎?

我的理由是我有一個存儲過程,需要調用多行。我可以編寫一個腳本來執行此操作,但想知道是否可以使用TSQL來完成此操作。

+1

歡迎來到StackOverflow:如果您發佈代碼,XML或數據示例,**請**突出顯示文本edi中的那些行並點擊編輯器工具欄上的「代碼示例」按鈕(「{}」),以精確地格式化和語法突出顯示它!這樣,你不需要任何雜亂的'
'標籤! –

+1

看起來更好。謝謝 –

回答

1

完成此操作的最佳方法是將第二個存儲過程創建爲用戶定義的函數。然後,你可以調用它以這樣的方式

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

或者,有可能是這兩個存儲過程組合成一組的方式,但我有看到什麼是您所呼叫的第二屆一個。

+0

+1今天學到了新東西。 –

0

從技術上來說,是的,但是您對存儲介質的調用格式不正確。

Exec sp_name 'SELECT * FROM TABLEA' 

Exec sp_name @sql1 = 'SELECT * FROM TABLEA' 

這就是說,你正在嘗試做的可能不是一個好主意。

1

該解決方案假定T-SQL是在SQL Server 2008和以上

  1. 創建一個表類型變量在運行,這需要做一次 USE YOURDBNAME; 轉到 Create TYPE TableAType as Table (A int null,B int null, C int null); 這將創建您正在使用的數據庫中的用戶定義表類型中的表類型變量。

  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

相關問題