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