【问题标题】:Stored Procedure: Reducing Table Data存储过程:减少表数据
【发布时间】:2010-05-26 15:25:40
【问题描述】:

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

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

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

例如....

我有一个程序返回这个:

选择 @batch 作为批处理, @计数为数量, pd.位置, 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 厚度 FROM 属性数据 pd 通过...分组 pd.位置, pd.GL, pd.GW, pd.GT

然后我调用这个过程,但只需要以下数据:

声明@BatchTable 表 ( 批处理 varchar(50), [长度] 十进制(10,3), 宽度小数(10,3), 厚度小数(10,3), )

INSERT @BatchTable(批次,[长度],宽度,厚度) 执行 dbo.batch_drawings_NEW @batch

所以在第二个命令中我不想要 Qty 和 Location 值。

但是上面的代码一直返回错误:

“插入错误:列名或提供的值的数量与表不匹配”

【问题讨论】:

    标签: sql stored-procedures temp-tables


    【解决方案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) 
    

    【讨论】:

    • 你不能从第一个存储过程的输出中选择插入的列吗?我不记得语法但是像INSERT @BatchTable (Batch, [Length], Width, Thickness) (Select Batch, [Length], Width, Thickness From EXEC dbo.batch_drawings_NEW) @batchSELECT Batch, [Length], Width, Thickness INTO @BatchTable FROM EXEC dbo.batch_drawings_NEW) @batch
    • 我相信你也可以做到。我不确定 DB 之间的一致性。
    • 对不起,我应该更清楚。我想在第一个过程中选择所有这些属性,因为我想在可能需要额外数据的其他过程中使用它。只是本例中的调用过程不需要其中的一些。所以我想而不是全部插入一个新表,我可以插入一些吗?不过,我将尝试为 INSERT 选择列。干杯。
    • @SumGuy - 我认为您在这里会遇到一些效率低下的问题,使用查询选择您在一个过程中真正不需要的数据,然后在第二个过程中对其进行过滤。我可能是错的,但从长远来看,你最好有更多的程序来返回所需的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多