代码之家  ›  专栏  ›  技术社区  ›  Bulrush

SQL语句不适用于MS SQL 2005

  •  0
  • Bulrush  · 技术社区  · 9 年前
    • SQL客户端:Ubuntu 14.04LTS
    • DB服务器:MS SQL Server 2005,通过odbc和Freetds访问。适用于我的另一台MS SQL 2005服务器。
    • isql 2.2.14
    • 释放0.91
    • 文本编辑器:windows 7的Notepad++6.5.5正在通过Samba共享在Ubuntu上编辑我的.sql文件。
    • 不,我不能升级任何东西,我只能用现有的东西。

    这把我难住了。我从I-net Clear Reports复制并粘贴了一条SQL语句,并将其粘贴到Windows编辑器中,该编辑器正在编辑一个Ubuntu.SQL文件,它只是一个文本文件。我已经通过isql和Perl连接到另一台MS SQL 2005服务器,没有问题。因此,我遇到了一个包含大约10个连接的大型SQL语句的问题,并将该语句简化为以下多行:

    SELECT PKG.SO_ID
    FROM
       PACKAGES AS PKG
    WHERE
        PKG.tracking_no = '640038823199'
    ;
    

    此文件由多行组成,以unix结尾。我的isql命令是: cat test1.sql | isql dsnname 'domain\username' password -v -b .

    我使用-b作为批处理模式,因为我通过文件向isql发送输入。 错误从第一行立即开始,但我仔细检查了语法,对于SQL Server 2005,在“PACKAGES AS PKG”中,“AS”是可选的。

    [37000][unixODBC][FreeTDS][SQL Server]Statement(s) could not be prepared.
    [37000][unixODBC][FreeTDS][SQL Server]The multi-part identifier "PKG.SO_ID" could not be bound.
    [ISQL]ERROR: Could not SQLExecute
    [37000][unixODBC][FreeTDS][SQL Server]Incorrect syntax near the keyword 'FROM'.
    [37000][unixODBC][FreeTDS][SQL Server]Statement(s) could not be prepared.
    [ISQL]ERROR: Could not SQLExecute
    [37000][unixODBC][FreeTDS][SQL Server]Incorrect syntax near the keyword 'AS'.
    [37000][unixODBC][FreeTDS][SQL Server]Statement(s) could not be prepared.
    [ISQL]ERROR: Could not SQLExecute
    [37000][unixODBC][FreeTDS][SQL Server]Incorrect syntax near the keyword 'WHERE'.
    [37000][unixODBC][FreeTDS][SQL Server]Statement(s) could not be prepared.
    [ISQL]ERROR: Could not SQLExecute
    [37000][unixODBC][FreeTDS][SQL Server]Incorrect syntax near '='.
    [37000][unixODBC][FreeTDS][SQL Server]Statement(s) could not be prepared.
    [ISQL]ERROR: Could not SQLExecute
    
    • 这里到底发生了什么?
    • isql或MS SQL是否可能在test1.SQL文件中的制表符有问题?之前有一个选项卡 PKG.tracking_no .
    • 我假设.sql文件只是一个包含sql语句的文本文件,跨越一行或多行。

    非常感谢。

    1 回复  |  直到 9 年前
        1
  •  5
  •   Nick Gorham    9 年前

    默认情况下,isql将每一行视为自己的查询,因此您需要将所有行合并到一行中。

    isql只是一个简单的测试应用程序,其设计目的不仅仅是为了验证连接和快速简单地发出查询。

    isql的后续版本中的-n选项将更接近您想要的,在调用SQLPrepare之前查找以分号结尾的行。