iT邦幫忙

0

SQL 不同資料庫相同語法執行

sql
匿名 2 年前3647 瀏覽

各位SQL高手們好
我這邊有多個資料庫,但是要做資料庫的欄位檢查,所以都要執行相同語法,
SQL 語法開頭打上 use A資料庫,A資料庫可以執行該語法,小弟想問:
如果我有A~Z多資料庫,我該如何寫語法,讓資料庫依序去執行該語法並傳輸結果出來?

看更多先前的討論...收起先前的討論...
kradark iT邦好手 1 級 ‧ 2 年前 檢舉

我該如何寫語法



語法
語法
語法
語法
語法

恩,寫了五次,請笑納!


並傳輸結果出來?



SELECT N'結果'

就會傳輸結果出來!

一級屠豬士 iT邦高手 1 級 ‧ 2 年前 檢舉
匿名,不想回.
外獅佬 iT邦大師 1 級 ‧ 2 年前 檢舉
SQL Server 2008~SQL Server 2014可以這麼做
DECLARE @sql nvarchar(max);
SET @sql='你的指令';
use A;
EXECUTE(@sql);
use B;
EXECUTE(@sql);
...
李大瑋 iT邦研究生 3 級 ‧ 2 年前 檢舉
問這麼專業的問題還暱名
...................
summertw iT邦好手 1 級 ‧ 1 年前 檢舉
大伙繞路囉~~
非不得已,不要使用二次解譯,以免消耗多的系統資源,而且又很不好除錯。
使用下列指令即可..
Select <Column_List......> From [DataBase_Name.][dbo.]Table_Name
有多才個DataBase,就寫多少行...
Exp:
Select * From A.dbo.Table_Name
Select * From B.dbo.Table_Name
Select * From C.dbo.Table_Name
..
..
..
Select * From Z.dbo.Table_Name
有時候考慮系統效能及程式的可閱請性(將來Debug用),程式部份寫法要古老一點好...
簡單能完成的工作,不要把它複雜化...

1 個回答

4
allenlwh
iT邦新手 1 級 ‧ 2 年前
最佳解答
&lt;pre class="c" name="code">
declare @資料庫名稱 varchar(100)
declare @sql_execute_str nvarchar(500)
declare @各資料庫要執行的語法 varchar(100)

set @各資料庫要執行的語法='SELECT COUNT(*) as 執行結果 FROM information_schema.TABLES'

declare myCursor cursor for
	SELECT name AS 'DATABASENAME' FROM master.dbo.sysdatabases 
	WHERE name NOT IN ('master','model','msdb','tempdb')
	order by name
open myCursor
FETCH NEXT FROM myCursor INTO @資料庫名稱

WHILE @@FETCH_STATUS = 0 
BEGIN
	select @資料庫名稱 as '目前資料庫名稱'
	SET @sql_execute_str = N'use '+ @資料庫名稱 + ' '
	set @sql_execute_str=@sql_execute_str + @各資料庫要執行的語法
	EXECUTE sp_executesql @sql_execute_str
	
	FETCH NEXT FROM myCursor INTO @資料庫名稱
END 
CLOSE myCursor 
DEALLOCATE myCursor		

我要發表回答

立即登入回答