Sql 查询每个数据库
我希望使用以下内容搜索数据库搜索中的每个数据库(它们都具有相同的表名):Sql 查询每个数据库,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我希望使用以下内容搜索数据库搜索中的每个数据库(它们都具有相同的表名): 从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) SE
从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
最简单的方法是使用(未记录的)。它的用途是:
exec sp_msforeachdb @command1 = N'insert into #tmp select "?", * from [?].dbo.table';
需要注意的是?
,它是数据库名称的占位符。在@command1
字符串中,使用双引号代替单引号
此过程还将枚举系统数据库,通过附加if db_id(“?”>4
跳过它们,您可以很容易地避开这一点