在所有数据库中运行公用表的SQL查询

时间:2017-01-21 05:59:42

标签: sql sql-server database

我尝试运行SQL查询以针对所有数据库中的公用表填充结果..但是它会导致错误输出

Create table #userid (dbname varchar(50), username varchar(50))
EXEC sp_MSforeachdb 'IF ''?'' NOT IN (''master'',''security'',''tempdb'')
BEGIN
inset into #userid
select ''?'' dbname, username from zuserdb where username IN (''a1234'',''b1234'')
END'
Select * from #userid
DROP table #userid

以上代码没有生成正确的输出..正在生成多行,但用户实际上并不存在于数据库中。任何建议

1 个答案:

答案 0 :(得分:0)

不确定为什么会发生这种情况没有记录,但这是一个解决方法。

在表名中使用三部分标识符。考虑zuserdb存在于所有数据库的dbo模式中。

CREATE TABLE #userid
  (
     dbname   VARCHAR(50),
     username VARCHAR(50)
  )

EXEC Sp_msforeachdb
  'IF ''?'' NOT IN (''master'',''security'',''tempdb'',''model'',''msdb'')
BEGIN
insert into #userid
select ''?'' dbname, username from ?.dbo.zuserdb where username IN (''a1234'',''b1234'')
END'

SELECT *
FROM   #userid

DROP TABLE #userid 

添加了model& msdb数据库也在排除列表中,因为它们也是系统数据库