【发布时间】:2017-02-16 03:58:15
【问题描述】:
我有一个选择查询语句,它将产生 600k 行。当我使用 select 语句盲目地提取结果时,它会影响数据库性能。是否有使用 Set rowcount 获取数据的选项?我尝试了下面的代码,但它一直在生成前 50000 行并最终进入无限循环。
#!/bin/ksh -x
trap "" 1
updrowcount=50000
while [ $updrowcount -eq 50000 ]
do
QUERY="set rowcount 50000
select subject into tempdb..extract from tablename where fldr_id=8"
runisql <<EOF > db_restenter code here
$QUERY
goenter code here
quit
EOF
updrowcount=`grep "rows affected" db_rest |cut -c2- | cut -f1 -d ' '`
done
exit
【问题讨论】:
-
@a_horse_with_no_name Sybase
-
您需要一些方法来记住您已经复制的最后一行,以便在下一次迭代中从该行开始。
-
对于更新查询集行计数对我有用。假设说,例如,如果我要更新 23 万条记录,我可以使用上面的代码每次使用 set rowcount 更新 50000 行但是对于 SELECT 语句没有帮助。 @JimmyB
-
只有当你有一个 WHERE 条件来区分已经更新的行和尚未处理的行时,你的更新才有效。 - SELECT 也需要这样做。