Sybase-如何将可变内容输出到文件

时间:2018-11-28 11:22:18

标签: sql sybase sybase-iq

我正在使用Interactive SQL在Sybase中编写一个过程。该过程包含几个SELECT语句,这些语句将结果存储在变量中,例如

DROP VARIABLE IF EXISTS @totalRows;
CREATE VARIABLE @totalRows LONG VARCHAR;
SELECT COUNT(*) INTO @totalRows FROM <MyTable>;

我希望能够将此查询的结果输出到CSV文件,但是在尝试运行以下语句时出现错误

DROP VARIABLE IF EXISTS @totalRows;
CREATE VARIABLE @totalRows LONG VARCHAR;
SELECT COUNT(*)  INTO @totalRows FROM <MyTable>;
OUTPUT TO 'C:\\temp\\TEST.CSV' FORMAT ASCII DELIMITED BY ';' QUOTE '' WITH COLUMN NAMES;

读取错误

Could not execute statement.  
Syntax error near 'OUTPUT' on line 4.  
SQLCODE=-131, ODBC 3 State="42000".  
Line 1, column 1

如果我删除查询的OUTPUT TO部分,它将运行良好。 Sybase是否可以通过这种方式将变量的内容写入外部文件?

3 个答案:

答案 0 :(得分:0)

似乎Sybase不支持'OUTPUT'子句。 解决方法是,如果您恰巧在客户端使用linux box,则可以使用某些基于文本的工具(例如sqlite)运行此查询,并将输出重定向(>)到文件中。 或者,您可以在Windows中添加与您的数据库相对应的ODBC数据源(需要sybase ODBC驱动程序),并使用MS Excel嵌入式工具Microsoft Query(数据->来自其他源->来自Microsoft Query)以导出查询直接将结果保存到excel数据表中,您可以将其另存为CSV。

答案 1 :(得分:0)

OUTPUT TO是dbisql命令,即dbisql客户端实用程序的指令。这不是SQL语句。如果尝试使用dbisql以外的任何方法执行此操作,则会收到错误消息。 顺便说一句-我相信OUTPUT子句必须在终止SELECT stmt的分号之后,即中间没有换行符。

答案 2 :(得分:0)

需要在输出语句之前添加选择变量

DROP VARIABLE IF EXISTS @totalRows;
CREATE VARIABLE @totalRows LONG VARCHAR;
SELECT COUNT(*)  INTO @totalRows FROM <MyTable>;
SELECT @totalRows; --select variable before output
OUTPUT TO 'C:\\temp\\TEST.CSV' FORMAT ASCII DELIMITED BY ';' QUOTE '' WITH COLUMN NAMES;