2011-07-01 43 views
0

我使用SQL Server 2008元數據集

我想要得到的列名數據類型的結果集的存儲過程的。我該怎麼做?像INFORMATION_SCHEMA這樣的東西會很有幫助。

回答

3

從應用程序中,您可以通過首先發出SET FMTONLY ON來檢查潛在的結果集。然而,這將在未來版本的SQL Server中逐漸淘汰,以支持更強大的元數據發現機制。與此同時,你可能會得到的最好的結果就是使用OPENQUERY來對付一個回送服務器。這假設你的存儲過程只返回一個結果集 - 如果有多個結果集,它不會工作。

例如:

EXEC master.dbo.sp_addlinkedserver 
    @server  = 'LOOPBACK_SERVER', 
    @srvproduct = '', 
    @provider = 'SQLOLEDB', 
    @datasrc = @@SERVERNAME; 

SELECT * INTO #foo 
    FROM OPENQUERY(LOOPBACK_SERVER, 'EXEC db_name.dbo.proc_name'); 

SELECT c.name, t.name, t.max_length, t.precision, t.scale 
    FROM tempdb.sys.columns AS c 
    INNER JOIN sys.types AS t 
    ON c.system_type_id = t.system_type_id 
    WHERE c.[object_id] = OBJECT_ID('tempdb..#foo'); 

DROP TABLE #foo; 

請注意,您不使用任何CLR的UDT或別名類型,這也假定。

+0

+1將SP添加到DBML文件時,Visual Studio似乎能夠確定結果集。我不知道這是否是它在引擎蓋下的作用 – Andomar

+0

你可以追溯到確定,但我懷疑它使用SET FMTONLY ON或它手動分析文本。 Visual Studio在過程有多個結果集時顯示什麼? –

+0

只是追蹤,它確實使用SET FMTONLY。 DBML僅顯示第一個結果集,您可以檢索更多,但您必須自己定義結果集。 – Andomar