Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 非空列上的左联接可以';t选择非空列_Sql_Sql Server 2005 - Fatal编程技术网

Sql 非空列上的左联接可以';t选择非空列

Sql 非空列上的左联接可以';t选择非空列,sql,sql-server-2005,Sql,Sql Server 2005,每个表都有一列RECNUM。它们是(十进制(28,0),不是空的)。这就是我加入的地方。我想在CAUNIT中选择列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 问题在于

每个表都有一列RECNUM。它们是(十进制(28,0),不是空的)。这就是我加入的地方。我想在CAUNIT中选择列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

问题在于
DESC
列。在SQL Server中,它是一个:

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

可能的解决办法:

  • 重命名列,例如
    说明
  • []
  • 您还可以使用别名来避免键入完整的表名:

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

    选择CDCLSVC.UNIT\u ID,CAUNIT.[DESC]…
    DESC
    是关键字。用
    []
    引用它,或者重命名它,例如“description”。并尽量避免在将来使用SQl server关键字作为对象名称。您好@lad2025:这不是评论,而是答案:-)@ThorstenKettner是的,但我认为这个问题显然是“输入错误”而且应该关闭。@lad2025:显然,当Chris选择
    DESC
    作为列名时,他不知道自己在使用保留字。所以这个问题没问题。而且,谁知道呢,将来甚至有人会犯类似的错误,并且很高兴找到这个请求和答案。