【发布时间】:2015-05-28 02:15:26
【问题描述】:
我不想做以下事情:将大表导出到文件系统以获得数据库的一些响应。
为此,我尝试分块卸载表(参见下面的代码)
我尝试了 Sybase Central - Interactive SQL 中的语句,但它一直抱怨卸载行存在语法错误 (odbc sstatus 42000)
如果我只执行注释行,它会执行我想要的前 1000 行。所以语法本身似乎是正确的。 我错过了什么(或者有没有更简单的方法从运行很长时间的 db 命令中获取反馈?)
CREATE VARIABLE @max_id INT;
CREATE VARIABLE @min_id INT;
CREATE VARIABLE @start_id INT;
CREATE VARIABLE @end_id INT;
SELECT @min_id = min(id) , @max_id = max(id) FROM testtable;
SELECT @start_id = @min_id , @end_id = @min_id + 1000 ;
//UNLOAD (SELECT * FROM testtable WHERE id BETWEEN @start_id AND @end_id) TO 'c:\temp\test.dat' ENCODING 'UTF8' APPEND ON;
WHILE @end_id <= @max_id
BEGIN
UNLOAD (SELECT * FROM testtable WHERE id BETWEEN @start_id AND @end_id) TO 'c:\temp\test.dat' ENCODING 'UTF8' APPEND ON;
SELECT @start_id = @end_id + 1 ;
SELECT @end_id = @end_id + 1000 ;
MESSAGE convert(varchar, @start_id);
END;
编辑:
WHILE @end_id <= @max_id LOOP
...
END LOOP;
似乎在交互式 sql 中做我想要的,但我在第一部分的错误是什么?使用循环它不能从外部命令工作(例如调用 BeginExecuteNonQuery)
【问题讨论】: