下面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: 关注
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'
正如我在这里问的那样
我希望就如何优化它提出建议,是否有更好的方法,例如定义一个表,然后定义字段,然后查询一个 1 倍大的时间选择等。
如果有人也可以给我一个很好的选择如何在下一个或同时摆脱 fetch ,请这样做。