2011-05-13 44 views
0

我需要處理表名作爲變量。然後我必須使用動態SQL,因此我必須使用存儲過程。 但問題是如何使用存儲過程,如自定義sql函數。使用存儲過程就像一個函數

e.g:從表1

+6

你不能。 以類似的方式使用存儲過程的唯一方法是使用循環支持的連接,但是您需要使用動態SQL將參數傳遞給存儲過程,這樣纔不會更好! – 2011-05-13 02:01:25

+2

你根本不需要:或許你應該給我們更大的圖片,這樣我們就可以提供解決方案...... – gbn 2011-05-13 05:08:41

+1

OP說:「我需要把表格名稱作爲變量來處理,我說:這是很可能是設計問題的結果。你可以使用你的松鼠作爲錘子,它可能會工作一點,但這不是他們設計的目的。改用錘子。 – 2011-05-13 13:09:49

回答

1

最後,我改變了我的設計,並在上層使用動態SQL。

0

選擇COL1,(Exec的SP1參數1, 'tbName')這將是在引入了新的關鍵字 「對於ResultSet的」 SQL Server Denali車型更多鈔票。

上當前SQL版本中的另一種方法是通過一個臨時表的存儲過程

+0

我相信這是OP後面的標量結果,而不是結果集。他們必須使用SP,因爲他們需要傳遞一個表名作爲參數,這意味着動態腳本,這又意味着一個函數不能被使用(否則這個問題將不存在)。 – 2011-05-13 09:35:26

0

存儲過程可以通過輸出參數返回標量值。這裏有一個例子(從here)。

創建存儲prodecure這樣的:

CREATE PROCEDURE _4P_test 
    @intInput int, 
    @intOutput int OUTPUT 
AS 
set @intOutput = @intInput + 1 
go 

這樣稱呼它:

declare @intResult int 
exec _4P_test 3 ,@intResult OUT 
select @intResult 

但是你應該嘗試設計您的系統,這樣你就不必使用動態SQL中你描述的方式。

相關問題