存储过程:减少表数据

时间:2010-05-26 15:25:40

标签: sql stored-procedures temp-tables

关于存储过程的简单问题。

我有一个存储过程在表中收集大量数据。然后,我从另一个存储过程中调用此过程。我可以将数据复制到调用过程中创建的新表中,但据我所知,表格必须相同。

这是对的吗?或者有没有办法只插入我想要的数据?

例如......

我有一个程序可以返回:

选择   @batch作为批处理,   @Count为数量,   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 来自propertydata pd 通过...分组   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

所以在第二个命令中,我不想要数量和位置值。

但是上面的代码仍然会返回错误:

“插入错误:列名称或提供的值数与表”

不匹配

1 个答案:

答案 0 :(得分: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)