2010-05-26 63 views
0

關於存儲過程的一個簡單問題。存儲過程:減少表數據

我有一個存儲過程收集表中的一大堆數據。然後我從另一個存儲過程中調用此過程。我可以將數據複製到調用過程中創建的新表中,但據我所見,表必須完全相同。

這是正確的嗎?或者有沒有辦法只插入我想要的數據?

例如....

我有一個程序,它返回這個:

SELECT @batch作爲批次, @count如數量, pd.Location, 鑄造(pd.GL作爲十進制(10,3))作爲[Length], cast(pd.GW,十進制(10,3))作爲寬度, cast(pd.GT作爲十進制(10,3))作爲厚度 FROM propertydata pd GROUP BY pd.Location, pd.GL, pd.GW, pd.GT

我然後調用該過程,但只希望如下的數據:

DECLARE @BatchTable TABLE( 批次VARCHAR(50), [長度]十進制(10,3) , 寬度十進制(10,3), 厚度十進制(10,3), )

INSERT @BatchTable(批次,[長度],寬度,厚度) EXEC dbo.batch_drawings_NEW @batch

小號o在第二個命令中我不需要數量和位置值。

然而上面的代碼保持返回錯誤:

「插入錯誤:列名或提供的值不匹配表中的號碼」

回答

1

的表格不必是相同的,結果來自第一個存儲過程的查詢需要匹配第二個定義的列,而他們不需要。

您需要將第一個存儲過程更改爲不返回數量和位置。

Select Batch, [Length], Width, Thickness FROM (
SELECT @batch as Batch, @Count as Qty, pd.Location, cast(pd.GL as decimal(10,3)) as [Length], cast(pd.GW as decimal(10,3)) as Width, cast(pd.GT as decimal(10,3)) as Thickness 
FROM propertydata pd GROUP BY pd.Location, pd.GL, pd.GW, pd.GT) 
+1

難道你不能從第一個存儲過程的輸出中選擇插入列嗎?我不記得語法,但像'INSERT @BatchTable(Batch,[Length],Width,Thickness)(選擇批次,[長度],寬度,厚度從EXEC dbo.batch_drawings_NEW)@ batch'或'SELECT Batch, [長度],寬度,厚度INTO @BatchTable FROM EXEC dbo.batch_drawings_NEW)@ batch'? – Lazarus 2010-05-26 15:35:52

+0

我相信你也可以這樣做。我不確定數據庫之間的一致性如何。 – 2010-05-26 15:41:24

+0

對不起,我應該更清楚。 我想在第一個過程中選擇所有這些屬性,因爲我想在可能需要額外數據的其他過程中使用它。這個例子中的調用過程並不需要其中的一部分。所以我認爲,而不是插入一個新的表,我可以插入一些? 我將盡力爲INSERT選擇列。 乾杯。 – SumGuy 2010-05-27 08:21:55