2010-05-26 62 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