【问题标题】:Left join ON not null columns can't select not null column左连接 ON 非空列不能选择非空列
【发布时间】:2016-04-07 20:39:21
【问题描述】:

每个表都有一个列 RECNUM。它们是(十进制(28,0),不为空)。这就是我加入的地方。我想在 CUNIT 中选择 DESC 列。它是 (varchar(28,0),不是 null)。当我运行查询时,我得到:

消息 156,级别 15,状态 1,行 1 关键字“DESC”附近的语法不正确。以下是我的查询:

SELECT CDCLSVC.UNIT_ID,CAUNIT.DESC
FROM CDCLSVC
LEFT JOIN CAUNIT
ON CDCLSVC.RECNUM = CAUNIT.RECNUM

【问题讨论】:

  • SELECT CDCLSVC.UNIT_ID,CAUNIT.[DESC] ... DESC 是关键字。用[] 引用它或重命名例如“描述”。
  • 并且以后尽量避免使用 SQl 服务器关键字作为对象名称。
  • 嗨@lad2025:这不是评论,而是答案:-)
  • @ThorstenKettner 是的,但我认为这个问题是明显的“错字”,应该关闭。
  • @lad2025:显然,当 Chris 选择 DESC 作为列名时,他不知道他使用了保留字。所以这个问题没问题。而且,谁知道呢,将来有人甚至可能会犯类似的错误,并且很高兴找到这个请求和答案。

标签: sql sql-server-2005


【解决方案1】:

问题在于DESC 列。在SQL Server 中是reserved keyword

Microsoft SQL Server 使用保留关键字来定义, 操作和访问数据库。保留关键字是 SQL Server 使用的 Transact-SQL 语言的语法 解析和理解 Transact-SQL 语句和批处理。 虽然它 在语法上可以使用 SQL Server 保留关键字作为 Transact-SQL 脚本中的标识符和对象名称,您可以这样做 只能使用分隔标识符。

可能的解决方案:

  1. 重命名列,例如description
  2. 引用[]

您也可以使用别名来避免输入完整的表名:

SELECT cd.UNIT_ID,ca.[DESC]
FROM CDCLSVC cd 
LEFT JOIN CAUNIT ca
ON cd.RECNUM = ca.RECNUM

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多