Sql 使用[,]和';

Sql 使用[,]和';,sql,sql-server,sql-server-2014,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

在表名中使用
[
]
'
时,我有一些问题。
举例来说,为什么这样做有效

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
带着错误

Msg 4104,16级,状态1,第4行-多部分标识符 无法绑定“dbname.dbo.O'conor”

还是这个

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

Msg 207,16级,状态1,第4行无效列名“O”“conor”

但是他是这样工作的

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

由于表_NAME需要一个值,但您提供了一个标识符,因此这些查询将不起作用

三,

由于您提供的是
sysname
值,因此此查询有效


旁注:最好使用只包含字母、数字和下划线的对象名,这样您就不需要在它们周围使用方括号。

TABLE_NAME=[dbname].[dbo].[O'conor]这个名称需要用引号括起来,例如,“[dbname].[dbo].[O'conor]”带
的那个,其中TABLE_NAME=[O'conor]
是绝对不正确的,因为您正试图将其用作列名,您应该改为使用
如果TABLE_name='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

use dbname
GO
DECLARE @COUNT int
SELECT @COUNT = Count(*) FROM  dbname.INFORMATION_SCHEMA.COLUMNS  where TABLE_NAME = [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