2011-05-11 44 views

回答

0

是的,你可以從一個存儲過程做到這一點,但不能從用戶定義的函數。值得研究表值函數,我相信你也可以從那裏返回一個動態表,但我自己並沒有使用它。

3

你可以做到這一點通過存儲過程,因爲它可以返回任何類型的表,問題是什麼是你想達到什麼會做與數據,你有沒有關於主意?

+0

我調換與2列和N行的表格與N列和2行的表通過樞軸操作。所以我不知道前面的列。據我所知,除非您事先知道表格架構,否則不能有存儲過程返回表格。 – 2011-05-11 16:06:35

+0

不,一個sproc可以返回一個動態集合,它不需要事先知道結構。 – RThomas 2011-05-11 17:15:52

2

這不能用函數來完成(作爲返回的表結構必須預先定義的),但是這是可以做到與存儲的進行。一些僞代碼:

CREATE PROCEDURE Foo 

As 

DECLARE @Command 

SET @Command = 'SELECT * from MyTable' 

-- For debugging, work in an optional PRINT @Command statement 
EXECUTE (@Command) 

RETURN 0 

當您運行存儲過程美孚,它建立您的查詢作爲一個@Command字符串,然後動態地執行它不知道什麼被查詢或退回任何東西,並且數據集由該EXECUTE語句返回的「傳回」給調用過程的進程。

建立與呵護您的查詢,這玩意兒可真難以調試。根據您的實現,它可能是SQL注入攻擊的來源(請記住,存儲過程實際上不知道該動態查詢將執行什麼操作)。對於快速的東西,EXECUTE()工作正常,但爲了更安全和更有用(如果精心製作)解決方案,請查看sp_ExecuteSQL

相關問題