小编geo*_*ika的帖子

如何在 Linux 上使用 sqlcmd 连接到 SQL Server?

我已经在 Ubuntu 16.04 机器上为 SQL Server 设置了 Microsoft ODBC Driver 13。我现在正在尝试测试一个数据库连接,其中包括服务器名称和实例名称。

以下都可以在 Windows 机器上正常工作:

sqlcmd -S "SERVERNAME\INSTANCENAME" -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"
sqlcmd -S SERVERNAME\INSTANCENAME -U User -P pwd -d DatabaseName -Q "SELECT TOP 5 Id FROM dbo.MyTable;"
Run Code Online (Sandbox Code Playgroud)

但是,它们都不适用于 Linux - 它们都返回下面的错误消息。该错误意味着找不到服务器:

Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : MAX_PROVS: Error Locating Server/Instance Specified [xFFFFFFFF]. . …
Run Code Online (Sandbox Code Playgroud)

sql-server linux ubuntu sqlcmd

13
推荐指数
1
解决办法
7万
查看次数

子查询中 ORDER BY 的数据库实现

我正在使用包装 SQL 语句的应用程序 (MapServer - http://mapserver.org/ ),以便 ORDER BY 语句位于内部查询中。例如

SELECT * FROM (
        SELECT ID, GEOM, Name
        FROM t
        ORDER BY Name
        ) as tbl
Run Code Online (Sandbox Code Playgroud)

该应用程序有许多不同的数据库驱动程序。我主要使用 MS SQL Server 驱动程序和 SQL Server 2008。如果在子查询中找到 ORDER BY,则会引发错误。

来自 MS Docs(虽然这适用于 SQL Server 2000,但它似乎仍然适用):

当您在视图、内联函数、派生表或子查询中使用 ORDER BY 子句时,它不保证有序输出。相反,ORDER BY 子句仅用于保证由 Top 运算符生成的结果集具有一致的构成。ORDER BY 子句仅在最外面的 SELECT 语句中指定时才保证有序的结果集。

但是,在 Postgres (9) 和 Oracle 中运行时,相同类型的查询会返回结果 - 其顺序与子查询中定义的顺序相同。在 Postgres 中,查询计划显示结果已排序,并且 Postgres 发行说明包括暗示使用子查询顺序的项目:

当子查询 ORDER BY 匹配上查询时避免排序

http://en.wikipedia.org/wiki/Order_by指出:

尽管一些数据库系统允许在子选择或视图定义中指定 ORDER BY 子句,但存在没有影响。

但是,从我自己对查询计划的检查来看:

  • SQL Server 2008 …

order-by consistency

10
推荐指数
1
解决办法
2万
查看次数

标签 统计

consistency ×1

linux ×1

order-by ×1

sql-server ×1

sqlcmd ×1

ubuntu ×1