我創建了一個創建臨時表的存儲過程。現在我需要能夠使用.NET查詢它。所以我需要這樣的東西:動態查詢在存儲過程中創建的臨時表
SELECT * FROM storedProcedure() WHERE ...
由存儲過程創建的表也是動態的,所以模式會改變。使用SQL Server 2005.
我不能使用一個函數,因爲需要返回的是一個動態表。事先必須定義表格使得函數無用。
我最終創建了一個全局臨時表,藉助動態SQL我能夠創建一個動態全局臨時表並通過.NET訪問它。
我創建了一個創建臨時表的存儲過程。現在我需要能夠使用.NET查詢它。所以我需要這樣的東西:動態查詢在存儲過程中創建的臨時表
SELECT * FROM storedProcedure() WHERE ...
由存儲過程創建的表也是動態的,所以模式會改變。使用SQL Server 2005.
我不能使用一個函數,因爲需要返回的是一個動態表。事先必須定義表格使得函數無用。
我最終創建了一個全局臨時表,藉助動態SQL我能夠創建一個動態全局臨時表並通過.NET訪問它。
由於參考指示,你使用類似:
insert into @t(<columns here>)
exec stored_procedure;
然而,在很多情況下,你可以用一個用戶自定義函數替換該存儲過程。這些被定義爲返回值,並根據需要使用它可以準確地使用:
select *
from dbo.udf_MyFunction();
有,當然,優點和缺點每種方法。存儲過程方法的一個缺點是不能嵌套這樣的存儲過程。函數方法的一個缺點是不能使用動態SQL。
使用函數然後是否可以返回一個動態表,因爲正如我已經看到的函數一樣,您必須在創建時聲明返回的表及其模式? – user1938919
@ user1938919。 。 。使用內聯表值函數,return子句指定格式。對於多行表值函數,則需要將該類型聲明爲定義的一部分。但是,要將存儲過程結果捕獲到表中,您需要在執行插入操作之前定義表*,因此您還需要在其中定義表格。 –
不工作,那麼我需要能夠從JSON創建一個動態表,然後將它與另一個表連接起來,然後返回被查詢。不過謝謝。 – user1938919
其實,你可以這樣
select *
from openrowset('SQLNCLI', 'Server=<your server here>;Database=<your database here>;Trusted_Connection=yes;','set fmtonly off exec <your procedure here>')
但是,我不能建議在生產中執行此操作,請考慮更改存儲過程,用戶自定義函數
看到這個帖子從存儲過程中選擇: [http://stackoverflow.com/questions/1492411/sql-server-select-from-stored-procedure][1] [1]:http://stackoverflow.com/questions/1492411/sql-server-select-from-stored-procedure – BWS
我們應該假設SQL Server是你的RDBMS嗎?全局臨時表怎麼樣? – Bridge
@Bridge我正在考慮全局臨時表,但如果有多個事務同時進行,那麼這不會被覆蓋嗎? – user1938919