我正在使用下面的查询来识别下拉列表的数据库;只要DatabaseName
没有任何特殊字符(例如句号,逗号等),它就可以正常工作,但当然,我们确实希望包含这些字符。现在,当我自己运行Select
语句时,它会正确返回所有表,但是当我添加WHERE
子句时,它会丢失名称中带有标点符号的表。我确信OBJECT_ID
中有一个错误,但我无法理解。
SELECT [name] AS DatabaseName FROM sys.databases
WHERE OBJECT_ID ([name] + N'.[dbo].[tblInfo]', N'U') IS NOT NULL
ORDER BY DatabaseName ASC
答案 0 :(得分:3)
怎么样:
SELECT [name] AS DatabaseName FROM sys.databases
WHERE OBJECT_ID (N'[' + [name] + N'].[dbo].[tblInfo]', N'U') IS NOT NULL
ORDER BY DatabaseName ASC
答案 1 :(得分:1)
QUOTENAME
:
WHERE OBJECT_ID (QUOTENAME([name]) + N'.[dbo].[tblInfo]', N'U') IS NOT NULL
(同样,包含保留字符的模式/表名)