我想在我的数据库搜索中搜索每个数据库(它们都具有相同的表名),并使用以下内容:
SELECT DISTINCT NAME FROM TABLE WHERE NAME = 'blah'
我试过这个:
SET NOCOUNT ON;
IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
DROP TABLE #temp
CREATE TABLE #temp
(
[COUNT] INT
, DB VARCHAR(50)
)
DECLARE @TableName NVARCHAR(50)
SELECT @TableName = '[dbo].[TABLE]'
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = STUFF((
SELECT CHAR(13) + 'SELECT ''' + name + ''', COUNT(1) FROM [' + name + '].' + @TableName
FROM sys.databases
WHERE OBJECT_ID(name + '.' + @TableName) IS NOT NULL
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
INSERT INTO #temp (DB, [COUNT])
EXEC sys.sp_executesql @SQL
SELECT *
FROM #temp t
答案 0 :(得分:0)
最简单的方法是使用(未记录的)sp_msforeachdb
。它的用法是:
exec sp_msforeachdb @command1 = N'insert into #tmp select "?", * from [?].dbo.table';
值得注意的是?
,它是数据库名称的占位符。在@command1
字符串中,使用双引号代替单引号。
此过程还将枚举系统数据库,您可以通过附加if db_id("?") > 4
来跳过它们,从而轻松回避这些数据库。