[英]Query tables across multiple databases
所有......我需要一種方法來跨多個數據庫查詢相同的表。 我有大約30多個數據庫,他們都有相同的表。
SELECT
a.name
, a.address
, b.company_id
, c.part_no
, c.cost
FROM accounts a
JOIN business b on a.whatever = b.whatever
JOIN crazy c ON b.things = c.things
像這樣簡單,但在所有數據庫中。 重點不是加入多個數據庫,這很簡單,它同時在所有數據庫中運行。 必須有一個比創建一個冗長的存儲過程更簡單的方法,不是嗎?
CREATE PROC dbo.alldatabasequery
AS
CREATE TABLE #temp (
databasename varchar(500),
name varchar(max),
address varchar(max),
company_id varchar(max),
cost varchar(max)
)
INSERT INTO #temp
EXEC sp_MSforeachdb N'IF ''?'' NOT IN ( ''model'',''tempdb'',''master'',''msdb'')
BEGIN
SELECT databasename=''?''
, a.name
, a.address
, b.company_id
, c.part_no
, c.cost
FROM ?.dbo.accounts a
JOIN ?.dbo.business b
on a.whatever = b.whatever
JOIN ?.crazy c
ON b.things = c.things
END' ;
SELECT * FROM #temp
GO
EXEC dbo.alldatabasequery
試試這個
CREATE TABLE #temp (
databasename varchar(500),
name varchar(max),
address varchar(max),
company_id varchar(max),
cost varchar(max)
)
DECLARE @statement varchar(max)=''
declare cur cursor FOR
select name
from master.dbo.sysdatabases
where dbid >4
open cur
DECLARE @name VARCHAR(8000)
fetch next from cur into @name
while @@fetch_status = 0
begin
SET @statement='SELECT databasename='''+@name+''', a.name
, a.address
, b.company_id
, c.part_no
, c.cost
FROM '+@name+'.dbo.accounts a
JOIN '+@name+'.dbo.business b
on a.whatever = b.whatever
JOIN '+@name+'.crazy c
ON b.things = c.things'
INSERT INTO #temp
EXEC (@statement)
fetch next from cur into @name
end
close cur
deallocate cur
SELECT * FROM #temp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.