sql如何在下面执行以下过程;因为当我尝试在SSMS上执行它时,每个项目需要大约15秒,但是,当放入sql代理程序作业时,几乎需要一辈子的时间来提供输出。
ForProcessing is a list of items
OPEN ForProcessing
FETCH NEXT FROM ForProcessing into @HeaderID, @CompanyCode, @AssignedCompanyID, @BranchCode, @WorkDate
WHILE @@FETCH_STATUS = 0
BEGIN
-- EOD for S1 FILE (MMS FILE)
if exists (select 1 from mMiddlewareFiles where cType = 'O' and cVersion = @cVersion and cFile = 'S1FILE')
BEGIN
execute rmw_eod_S1_file @HeaderID, @AssignedCompanyID, @BranchCode, @WorkDate
END
-- EOD for SL FILE (CSA FILE)
if exists (select 1 from mMiddlewareFiles where cType = 'O' and cVersion = @cVersion and cFile = 'SLFILE')
BEGIN
execute rmw_eod_SL_file @HeaderID, @AssignedCompanyID, @BranchCode, @WorkDate
END
-- EOD for C FILE (CSA FILE)
if exists (select 1 from mMiddlewareFiles where cType = 'O' and cVersion = @cVersion and cFile = 'CFILE')
BEGIN
execute rmw_eod_C_file @HeaderID, @AssignedCompanyID, @BranchCode, @WorkDate
END
FETCH NEXT FROM ForProcessing into @HeaderID, @CompanyCode, @AssignedCompanyID, @BranchCode, @WorkDate
END
如果我要单独创建该函数而不是使用一个调用这些过程的大脚本,那么它会显着提高性能吗?
有任何建议进入这个?或者如何优化这种程序?
修改
与我的这个问题有些相关,在执行的程序中,我找到了ff:Concer
DECLARE @a, @b, @c, @d, @e, etc... --the list grows
SELECT @a = field2 from Parameters where field1 = 'UserName'
SELECT @b = field2 from Parameters where field1 = 'Name'
SELECT @c = field2 from Parameters where field1 = 'CompanyCode'
SELECT @d = field2 from Parameters where field1 = 'MachineNo'
SELECT @e = field2 from Parameters where field1 = 'Type'
正如我在这里问SO
我希望就如何优化它提出建议,是否有更好的做法,例如定义一个表然后是字段,只需查询一次大时间选择等等。
如果有人也可以给我一个很好的选择,如何摆脱下一次或同时取,请这样做。
答案 0 :(得分:0)
正如Rory Hunter所说,你不要在你的光标前进。
呼叫
FETCH NEXT FROM ForProcessing into @HeaderID, @CompanyCode, @AssignedCompanyID, @BranchCode, @WorkDate
再次作为循环中的最后一个语句,否则会得到无限循环