2014-10-28 82 views
0

我有一個存儲過程,我計劃使用SSRS,它包含50多個不同的列。我有另一個執行它的過程,我計劃插入到結果表中,但我需要事先知道列名。當我嘗試執行時,出現如下錯誤:保存存儲過程的列類型

列名或提供的值數量與表定義不匹配。

我懷疑這是因爲我的一列是不正確的數據類型。我怎樣才能弄清楚創建我的表的數據類型是哪些列?

我的插入語句:

insert into @resultset 
    exec my_proc 
+3

我認爲你錯過了一列或有一個額外的列 - 你會得到一個不同的錯誤消息的數據類型的問題。你使用的是什麼版本的SQL Server?你爲什麼給這個'mysql'添加標籤? – 2014-10-28 18:52:26

+0

@AaronBertrand目前在SQL服務器管理工​​作室2008年,我將刪除標籤,意思是說微軟的SQL。由於錯誤不是非常詳細,我怎樣才能拉那些程序列? – aperture 2014-10-28 19:03:48

+0

好吧,最簡單的方法是查看存儲過程,並計算最後一個'SELECT'中的列,並檢查至少計數是否與'@ resultset'的定義匹配,然後從那裏開始。這些輸出並不是真正存儲在SQL Server元數據中的任何地方[儘管SQL Server 2012中有幫助函數可以幫助您升級時](http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/ 20/SQL服務器-v-下一德納-元數據discovery.aspx)。 – 2014-10-28 19:08:25

回答

1

作爲一個快速作弊,你可以運行存儲過程作爲一個SQL語句的膽量,並改變過去的SELECT語句轉換成類似:

SELECT TOP 0 columnlist 
INTO ResultTable 
FROM LastSelectStatement 

這會給你正確的列號和數據類型。

+0

我沒有想到只是抓住了大量的代碼,並使其成爲一個選擇。代碼很長並且令人困惑,這似乎是最好的答案。即使它是一個騙子。 :) – aperture 2014-10-30 12:51:34