2010-09-07 23 views
1

我正在使用遺留系統,我需要調用存儲過程來檢索我需要的數據。問題是,我不知道輸出列格式是什麼。在進入存儲過程並從SQL中計算出輸出列格式之後,有沒有辦法讓我看看輸出列的類型是什麼?我可以運行存儲過程,但代碼很混亂,如果可以的話,我寧願把它當作黑盒子。SQL Server 2005確定存儲過程輸出類型

編輯:我知道,我不可能從數據庫元數據中確定這一點,因爲過程可能會根據輸入的內容返回不同的結果。我想我應該改寫我的問題:給定存儲過程的結果集,我如何確定列類型?

+0

偉大的問題 - 不幸的是,沒有任何很好的答案,恐怕.... – 2010-09-07 20:29:50

回答

1

存儲的過程輸出不同的結果集你會怎麼辦如你所知,你不能確定來自任何數據庫元數據的信息(因爲沒有),不幸的是,你不能從結果集中確定 - 至少不是以任何可靠的,確定性的方式。

當你調用一個存儲過程時,你所得到的只是一堆列和一堆行。沒有關於這些列的類型的固有信息。你可以做的最好的猜測是 - 如果數據包含字母數字字符,則它是一個VARCHAR /字符串字段。如果它只有數字,可能還有小數點分隔符,它可能是INT或DECIMAL(或MONEY或SMALLMONEY--無法確定)。如果它看起來像DATE並且可以轉換爲DATE,那麼可能是DATE,DATETIME,DATETIME2或類似的東西。

唯一的可靠方法是有一些關於存儲過程生成的輸出值的文檔。其他任何事情都是猜測。

+0

我明白了。我希望有一些元數據可以被SQL Server Management Studio排除在外。我想沒有,我不得不深入到存儲過程的SQL源,看看我正在處理:(無論如何,感謝您的明確答案。 – quanticle 2010-09-07 21:04:49

0

如果取決於什麼是......通過例如

create procedure Test 
@var int 
as 
if @var =1 
begin 
select col1,col2 from table1 
end 
else if @var =2 
begin 
select col4,col2 ,col5,col1 from table2 
end 
else 
begin 
select * from table3 
end 

有一組選擇,但它已被棄用

SET FMTONLY ON; 
GO 
exec YourProc 
GO 
SET FMTONLY OFF; 
GO 
+0

我知道它不可能確定結果集靜態,正是這個原因。我想我想知道的是,給定存儲過程的結果集,我如何確定結果集的列類型?我已經編輯了這個問題,澄清了這一點。 – quanticle 2010-09-07 19:26:13

+0

你在哪裏看到SET FMTONLY被棄用?它不在任何地方用BOL表示。 – 2010-09-07 20:30:52