背景:
我知道如何针对实例上的所有数据库运行查询,但我发现它为某些数据库返回了正确的结果,而对于其他数据库则返回了不正确的结果。我的所有数据库都具有相同的模式,因此没有理由使查询正确地再次运行某些数据库并为其他数据库生成虚假结果。 Basicaly查询应显示“用户”表中是否存在记录XYZ。如果记录存在,查询应返回相关记录。否则应打印NULL
。
这是我的疑问:
CREATE TABLE ##tempUsers(DB_Name VARCHAR(MAX), userID VARCHAR(MAX), role VARCHAR(MAX));
GO
DECLARE @command varchar(1000)
SELECT @command = 'Use ? INSERT INTO ##tempUsers select ''?'', userID, role from users where userID = ''XYZ'';'
EXEC sp_MSforeachdb @command
GO
SELECT Name, UserID, Role
FROM ##tempUsers i RIGHT JOIN sys.databases o
ON o.name = i.db_name
GO
DROP TABLE ##tempUsers;
问题:
查询正确识别给定表中包含给定记录的一些数据库。还有一些数据库查询显示为NULL,即使它们具有所需的记录。对于此类数据库,即使它们包含有问题的记录,也会返回NULL。架构在所有数据库中都是相同的,并且数据库不区分大小写。
通过消除,我发现查询的以下部分只是将某些数据库的结果插入到临时表中。
SELECT @command = 'Use ? INSERT INTO ##tempUsers select ''?'', userID, role from users where userID like ''%tempUsers%'';'
EXEC sp_MSforeachdb @command
我做了什么
1)针对被误认为不包含记录的每个数据库运行简单SELECT column1, Column2
会产生正确的结果。
2)我尝试将= ''
替换为LIKE %%
,但没有任何区别。
问题:
如何更改我的查询,以便它返回所有数据库的正确结果,而不仅仅是其中一些数据库?