【问题标题】:SELECT query on a table with a space in the name using SQSH使用 SQSH 对名称中带有空格的表进行 SELECT 查询
【发布时间】:2012-02-14 03:34:00
【问题描述】:

我在 Ubuntu 10.04 上使用 SQSH(2.1 版)使用如下命令连接到 MSSQL 数据库:

sqsh -S server -U user -P password -D database

我有一个名为 My Table 的表,但我找不到在其上运行 SELECT 查询的方法。这是我迄今为止尝试过的:

SELECT * FROM 'My Table'
go

输出:“我的表”附近的语法不正确。 (我对双引号也有同样的看法)

\set t="My Table"
SELECT * FROM $t
go

输出:无效的对象名称“我的”。 (这很奇怪,因为如果我执行 \echo $t,我会得到完整的表名)

SELECT * FROM My\\ Table
go

输出:无效的对象名称“我的”。

SELECT * FROM [My Table]
go

输出:纯 Unicode 排序规则中的 Unicode 数据或 ntext 数据无法使用 DB-Library(例如 ISQL)或 ODBC 3.7 或更早版本发送到客户端。

最后一个命令适用于没有空格的表名。

更新:其他命令工作正常,例如我可以通过以下方式获取表格描述:

SELECT column_name,data_type FROM information_schema.columns WHERE table_name = 'My Table'
go

【问题讨论】:

  • 您使用的是 Sybase,并且您有一个名称中包含空格的表?
  • 不,它是一个 MSSQL 数据库。抱歉,标签可能具有误导性。
  • 你能测试一下如果你把表名中的空格去掉会发生什么吗?
  • 正如我在问题末尾提到的那样:还有其他表的名称中没有空格,并且对它们来说一切正常,即我可以自己使用名称,或者将其包装在方括号中,或者将其分配给一个变量并使用它,它工作正常。

标签: sql-server sqsh


【解决方案1】:

尝试在使用 SQL Server 时将 QUOTED_IDENTIFIER 设置为 ON。有关 QUOTED_IDENTIFIER 的更多信息,请参阅:http://msdn.microsoft.com/en-us/library/ms174393.aspx

【讨论】:

  • 感谢您的想法,不幸的是它没有帮助。
【解决方案2】:

终于找到the solution。我必须将以下 2 行添加到 /etc/freetds/freetds.conf

tds version = 8.0
client charset = UTF-8

【讨论】:

    【解决方案3】:

    将表名放在引号中在 MS SQL Server 中不起作用。
    正确的方法是使用[ ]:

    SELECT * FROM [My Table]
    

    【讨论】:

    • 谢谢,但正如我在问题中所说,这对我不起作用。我错过了一些配置设置(请参阅我的答案),一旦有了这些,SELECT 查询就可以使用引号或方括号。
    【解决方案4】:

    我使用的是 SQL 2008R2,以下对我有用

    ['table name']
    

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多