对于脚本来说查询太慢我已经使用查询生成器编写了多个查询的脚本。 然后我将这些脚本背靠背放置。 接下来,我想使用由查询形成的新数据表。
我的问题是其中一个查询需要超过 10 秒才能运行,并且查询后面的 JSL 尝试使用“待形成”表(当脚本到达该部分代码时该表不存在) 。 这显然会导致错误并退出脚本。
我尝试使用“运行后台”命令,但这似乎只是一起结束脚本。
有什么想法可以运行查询并强制等待,直到所有查询都返回其表,然后再运行脚本的其余部分(作用于这些表)?
谢谢你,
马丁
回复:查询对于脚本来说太慢抱歉,我迟到了 - 布莱恩的使用建议运行前台JSL 中的查询是确保查询在 JSL 的下一行运行之前完成的方法。 不需要重新写!
埃里克
回复:查询对于脚本来说太慢实际上,更好的是使用 Run Foreground。很抱歉没有立即得到正确的结果,但是类似:
查询1 = 新的 SQL 查询(
联系(...
) ,
订购依据( ) ,
后查询脚本(...
)
) ;
查询1 <<运行前台;
应该管用。
布莱恩
回复:查询对于脚本来说太慢嗨马丁,
您还可以尝试关闭查询的后台操作。这对我有用。您可以转到“首选项->查询生成器->ODBC->尽可能在后台运行查询”并取消选中该选项,或者在脚本中您可以执行以下操作:
查询生成器设置(后台查询(0))
在脚本的顶部。
布赖恩·科科伦
JMP开发
回复:查询对于脚本来说太慢非常感谢你,pmroz!!!! 这需要一些重写,但效果很好!
回复:查询对于脚本来说太慢我会尝试一下,然后让你知道结果如何。
谢谢
回复:查询对于脚本来说太慢我怀疑查询 << 运行立即返回。 我不确定你如何同步它。
我用执行SQL相反,这似乎要等到完成后才能推进脚本。 例如,如果您有 4 个 SQL 语句要运行:
dbc = create database connection(<CONNECTION-STRING>);
dt1 = execute sql(dbc, sql1);
dt2 = execute sql(dbc, sql2);
dt3 = execute sql(dbc, sql3);
dt4 = execute sql(dbc, sql4);
close database connection(dbc);</CONNECTION-STRING>
回复:查询对于脚本来说太慢是的。 Wait(0) 实际上并没有按照你的建议去做。 查询实际上根据(看起来的)其大小和复杂性以随机顺序返回。 我有 7 个查询,这是第 4 个查询,需要很长时间。 我尝试将该查询放在脚本中的第一个查询,但其他查询运行得太快,以至于当脚本中的其余代码执行时,这个查询仍然没有完成。
这是我正在使用的代码的一部分,其中大部分被删除以保护源代码。 但是,它给出了一般结构。 为了简洁起见,我删除了查询 4-7 和最后 4 个 Join 语句。
查询1 = 新的 SQL 查询(
联系(...
) ,
订购依据( ) ,
后查询脚本(...
)
) ;
查询1 <<跑步;
等待( 0 ) ;
查询2 = 新的 SQL 查询(
联系(...
) ,
订购依据( ) ,
后查询脚本(...
)
) ;
查询2 <<跑步;
等待( 0 ) ;
Query3 = 新的 SQL 查询(
联系(...
) ,
订购依据( ) ,
后查询脚本(...
)
) ;
查询3 <<跑步;
等待( 0 ) ;
//连接表
表 12 = 数据表( “01” ) <<加入(
和(数据表( “02” ) ) ,
合并同名列,
比赛旗帜( 0 ) ,
通过匹配列(
:
) ,
丢弃倍数( 0 , 0 ) ,
包括不匹配项( 0 , 0 ) ,
保留主表顺序( 1 ) ,
输出表( “12” )
) ;
表 123 = 数据表( “12” ) <<加入(
和(数据表( “03” ) ) ,
合并同名列,
比赛旗帜( 0 ) ,
通过匹配列(
:
) ,
丢弃倍数( 0 , 0 ) ,
包括不匹配项( 0 , 0 ) ,
保留主表顺序( 1 ) ,
输出表( “123” )
) ;
回复:查询对于脚本来说太慢你有没有等待(0);每次检索后命令? 这应该会强制 JMP 等待先前命令的完成。