Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 WHERE子句中的对象\u ID会删除特殊字符_Sql_Sql Server - Fatal编程技术网

Sql WHERE子句中的对象\u ID会删除特殊字符

Sql WHERE子句中的对象\u ID会删除特殊字符,sql,sql-server,Sql,Sql Server,我使用下面的查询为下拉列表标识数据库;只要DatabaseName没有任何特殊字符(例如句点、逗号等),它就可以正常工作,但当然,我们确实希望包含这些字符。现在,当我单独运行Select语句时,它会正确返回所有表,但当我添加WHERE子句时,它会丢失名称中带有标点符号的表。我确信我在OBJECT\u ID中有一个错误,但我就是想不出来 SELECT [name] AS DatabaseName FROM sys.databases WHERE OBJECT_ID ([name] + N'.[d

我使用下面的查询为下拉列表标识数据库;只要
DatabaseName
没有任何特殊字符(例如句点、逗号等),它就可以正常工作,但当然,我们确实希望包含这些字符。现在,当我单独运行
Select
语句时,它会正确返回所有表,但当我添加
WHERE
子句时,它会丢失名称中带有标点符号的表。我确信我在
OBJECT\u ID
中有一个错误,但我就是想不出来

SELECT [name] AS DatabaseName FROM sys.databases 
WHERE OBJECT_ID ([name] + N'.[dbo].[tblInfo]', N'U') IS NOT NULL
ORDER BY DatabaseName ASC
那么:

SELECT [name] AS DatabaseName FROM sys.databases 
WHERE OBJECT_ID (N'[' + [name] + N'].[dbo].[tblInfo]', N'U') IS NOT NULL
ORDER BY DatabaseName ASC
那么:

SELECT [name] AS DatabaseName FROM sys.databases 
WHERE OBJECT_ID (N'[' + [name] + N'].[dbo].[tblInfo]', N'U') IS NOT NULL
ORDER BY DatabaseName ASC

QUOTENAME

WHERE OBJECT_ID (QUOTENAME([name]) + N'.[dbo].[tblInfo]', N'U') IS NOT NULL

(包含保留字符的架构/表名称同上)

QUOTENAME

WHERE OBJECT_ID (QUOTENAME([name]) + N'.[dbo].[tblInfo]', N'U') IS NOT NULL

(对于包含保留字符的架构/表名也是如此)

我以前从未见过QUOTENAME()函数。那真的很有用。谢谢您应该更喜欢将名称包含在
[]
中,因为这对包含
[]
的表名不起作用,该表名需要
QUOTENAME
提供的特殊转义。我以前从未见过QUOTENAME()函数。那真的很有用。谢谢您应该更喜欢将名称包含在
[]
中,因为这不适用于包含
[]
的表名,该表名需要
QUOTENAME
提供的特殊转义