piracy123 2014-08-04 11:24 采纳率: 0%
浏览 7138

请问存储过程里面如何循环传参,用临时表吗??

ALTER proc [dbo].cunchu11,
@CGR nvarchar(30),
@CGRQ date,
@CGZE decimal(20,2),
@SH bit,
@SPBH nvarchar(20),
@SPLB nvarchar(20),
@SPMC nvarchar(20),
@SL int,
@DJ decimal(20,2),
@GYS nvarchar(20),
@SFJE decimal(20,2)
)
as
declare @i int
set XACT_ABORT on --只要是个错误就回滚
begin tran --开始执行事务

insert into Procure values(@DJBH,@CGR,@CGRQ,@CGZE,@SH) --增加主表

set @i=0
while @i<10
begin
--我想循环传入这些参数@DJBH,@SPBH,@SPLB,@SPMC,@SL,@DJ,@GYS,@SFJE,每次数值都不一样,不知道怎么传,循环好使,就是不知道怎么把参数传过来,sql里面没有数组,别人说能用临时表传
insert into Procure_child values(@DJBH,@SPBH,@SPLB,@SPMC,@SL,@DJ,@GYS,@SFJE) --增加子表
set @i = @i+1
end

if @@error<>0 --判断如果两条语句有任何一条出现错误
begin rollback tran --开始执行事务的回滚,恢复的转账开始之前状态
return 0
end
else

begin commit tran --执行这个事务的操作
return 1
end

本人新手,如果用临时表的话,请写清楚点。谢谢

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 10:27
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在SQL Server中,你可以使用EXECUTE AS SELECT来实现类似循环的过程,但是需要注意的是,这种方法只能处理单个参数,并且不能处理多个参数。

    如果你想要处理多参数的情况,你可能需要考虑使用EXECUTE AS INSERT INTO的方式。这种方式可以在一个查询中插入多个行到表中。以下是一个例子:

    DECLARE @params TABLE (param1 INT, param2 INT, param3 INT);
    
    INSERT INTO Procure (DJBH, CGR, CGRQ, CGZE, SH, SPBH, SPLB, SPMC, SL, DJ, GYS, SFJE)
    SELECT @params.[param1], @params.[param2], @params.[param3] 
    FROM @params;
    
    DECLARE @child_params TABLE (child_param1 INT, child_param2 INT, child_param3 INT);
    
    INSERT INTO Procure_child (DJBH, SPBH, SPLB, SPMC, SL, DJ, GYS, SFJE)
    SELECT @child_params.[child_param1], @child_params.[child_param2], @child_params.[child_param3]
    FROM @child_params;
    

    在这个例子中,我们首先将所有参数插入Procure表,然后将它们再次插入Procure_child表。这样就可以在一个查询中完成你的任务了。

    请注意,这种方法可能会导致数据冗余,因为每个参数都会被重复地插入两次。如果你的数据量很大,或者你想确保每条记录都是唯一的,那么你可能需要找到一种更合适的方法。

    评论

报告相同问题?