使用[,]和'的SQL错误表名称

时间:2016-04-04 07:40:02

标签: sql sql-server sql-server-2014

我在表名中使用[]'时遇到一些问题/问题。
例如,为什么这个工作

SELECT TOP 1000 [O'test]
      ,[NumeNOU]
  FROM [dbname].[dbo].[O'conor]

而这不是

use dbname
GO
DECLARE @COUNT int
SELECT @COUNT = Count(*) FROM  dbname.INFORMATION_SCHEMA.COLUMNS  where TABLE_NAME = [dbname].[dbo].[O'conor]
PRINT @COUNT

错误

  

消息4104,级别16,状态1,行4多部分标识符   " dbname.dbo.O'康纳"无法受约束。

或者

use dbname
    GO
    DECLARE @COUNT int
    SELECT @COUNT = Count(*) FROM  dbname.INFORMATION_SCHEMA.COLUMNS  where TABLE_NAME = [O'conor]
    PRINT @COUNT

错误

  

消息207,级别16,状态1,行4无效的列名称''' conor'。

但是像这样工作

use dbname
        GO
        DECLARE @COUNT int
        SELECT @COUNT = Count(*) FROM  dbname.INFORMATION_SCHEMA.COLUMNS  where TABLE_NAME = 'O''conor'
        PRINT @COUNT

1 个答案:

答案 0 :(得分:0)

1 + 2

use dbname
GO
DECLARE @COUNT int
SELECT @COUNT = Count(*) FROM  dbname.INFORMATION_SCHEMA.COLUMNS  where TABLE_NAME = [dbname].[dbo].[O'conor]
PRINT @COUNT

use dbname
GO
DECLARE @COUNT int
SELECT @COUNT = Count(*) FROM  dbname.INFORMATION_SCHEMA.COLUMNS  where TABLE_NAME = [O'conor]
PRINT @COUNT

由于TABLE_NAME需要sysname值,但您提供了一个标识符,因此Thess查询无效。

3

use dbname
GO
DECLARE @COUNT int
SELECT @COUNT = Count(*) FROM  dbname.INFORMATION_SCHEMA.COLUMNS  where TABLE_NAME = 'O''conor'
PRINT @COUNT

此查询有效,因为您提供的值为sysname

附注:使用仅包含字母,数字和下划线的对象名称会更好,这样您就不需要使用它们周围的方括号。