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
提供的特殊转义