自動在多個DB上執行同一條sql語句

2021-05-27 11:28:58 字數 1407 閱讀 9722

declare @dbs     varchar(1000)

declare @dbname varchar(15)

declare @idx int

declare @sql varchar(5000)

set @dbs ='dbname1,dbname2' --設定所有需要查詢的db, 並用逗號隔開

while (len(@dbs) > 0)

begin

set @idx = charindex(',', @dbs)

if (@idx > 0)

begin

set @dbname = substring(@dbs, 0, @idx)

set @dbs = substring(@dbs, @idx + 1, len(@dbs) -@idx)

endelse

set @dbname = @dbs

set @dbname=ltrim(rtrim(@dbname))

print '----' + @dbname + '----'

--在多個db上執行的sql語句 begin--

--必須用 dbname.dbo.tablename 這種形式, exec('use '+@dbname)是錯誤的

set @sql = 'select * from @dbname.dbo.tablename'

--在多個db上執行的sql語句 end--

set @sql=replace(@sql,'@dbname',@dbname) --執行替換, 好處是避免在上一步sql語句複雜時使用多個+號

exec(@sql) --執行動態sql

--print(@sql) --用於除錯, 判斷動態生成的sql語句是否正確

if (@idx <= 0)

break

end--要做的事情只有兩個

--1.列舉所有的db名稱, 賦給@dbs, 可用下面的語句

-- select name from master..sysdatabases order by name

-- 如果你覺得還不省事, 上面的用文字方式得到的db名稱不夠方便, 裡面的是回車而不是逗號, 可用下面的語句來實現

declare @dbstemp varchar(5000)

set @dbstemp='db01 --將上面得到的db複製過來

db02'

set @dbstemp=replace(replace(@dbstemp,char(10),''),char(13),',') --10. 換行, 13.回車

print @dbstemp

--2.構建sql, 測試完成一條後, 在表名前加上 "@dbname.dbo. " , 賦給@sql

在Mysql中執行一條SQL,會經歷什麼

我們都經常使用mysql作為資料庫來儲存與查詢較常用的資料。當我們輸入一行如select from table name where id 26這樣的語句之後,mysql如果正確執行的情況下,會輸出你想要的資訊。那麼,在你輸入這行語句之後,一直到它顯示出你想要的資訊,這中間mysql都經歷了什麼呢?...

一條sql語句在mysql中如何執行的

1.1 mysql 基本架構概覽 下圖是 mysql 的乙個簡要架構圖,從下圖你可以很清晰的看到使用者的 sql 語句在 mysql 內部是如何執行的。先簡單介紹一下下圖涉及的一些元件的基本作用幫助大家理解這幅圖,在 1.2 節中會詳細介紹到這些元件的作用。查詢快取 執行查詢語句的時候,會先查詢快取...

一條SQL語句在MySQL中如何執行的

本篇文章會分析乙個 sql 語句在 mysql 中的執行流程,包括 sql 的查詢在 mysql 內部會怎麼流轉,sql 語句的更新是怎麼完成的。在分析之前我會先帶著你看看 mysql 的基礎架構,知道了 mysql 由那些元件組成以及這些元件的作用是什麼,可以幫助我們理解和解決這些問題。1.1 m...