SQL Server查询所有数据库下模式schema
SQL Server查詢所有數(shù)據(jù)庫下模式名
需求描述
找到SQL Server里所有數(shù)據(jù)庫下的schema.輸出格式為數(shù)據(jù)庫名、模式名。
?背景補(bǔ)充
關(guān)于SQL Server需要簡單介紹下,從數(shù)據(jù)庫對象的粒度上可粗略的分為server、database、schema、table、colmun。這里server相當(dāng)于instance(實(shí)例),一臺機(jī)器可以裝多個實(shí)例,一個實(shí)例有多個數(shù)據(jù)庫,一個數(shù)據(jù)庫有多個schema(模式),schema相當(dāng)于把相似的表做個歸類。比如零售系統(tǒng)里production模式歸檔是產(chǎn)品相關(guān)的表,sales模式則是銷售相關(guān)的表。一個模式會有多個table(表),一個表會有多個字段(列)。
?補(bǔ)充說明:一個schema可以賦予多個用戶,一個用戶也可以對應(yīng)多個schema。
?思路概述
#1 思路概述
1) 找到顯示當(dāng)前數(shù)據(jù)庫下schema的系統(tǒng)視圖。這里對應(yīng)的是sys.schemas。
2) 找到可以查詢所有數(shù)據(jù)庫的系統(tǒng)視圖,這里是sys.databases
3) 給所有數(shù)據(jù)庫加個序號,以方便后續(xù)遍歷。
4)通過WHILE循環(huán)匹配 3)里的序號。
5) 拼接動態(tài)SQL生成每個數(shù)據(jù)庫查詢schema的SQL語句。
6)遍歷執(zhí)行并插入表變量里,最后展示查詢結(jié)果。
TSQL代碼
-- #方法1: 通過WHILE和動態(tài)SQL DECLARE @tb_schemas TABLE(db_name varchar(200),schemas_name varchar(200)); DECLARE @i INT; DECLARE @sql VARCHAR(300); SET @i = 1BEGINWHILE @i <= (SELECT COUNT(*) FROM sys.databases)BEGINSELECT @sql = ' use ' + A.name+';' + 'SELECT '+''''+A.name+''''+ ',name schemas_name FROM sys.schemas' FROM(SELECT A.name,ROW_NUMBER()OVER(order by database_id) rnFROM sys.databases A)AWHERE A.rn = @iINSERT INTO @tb_schemas EXEC(@sql);SET @i = @i + 1EndSELECT DISTINCT db_name,schemas_name FROM @tb_schemas ORDER BY db_name;END -- 封裝成存儲過程僅需要在代碼最前加創(chuàng)建存儲語句即可(選做)。-- #方法2:用內(nèi)置的系統(tǒng)存儲過程sp_MSforeachdb結(jié)合臨時表 CREATE TABLE #schemaTable(dbname VARCHAR(100),schemaname VARCHAR(100))EXEC sp_MSforeachdb @command1="print '?'",@command2="INSERT INTO #schemaTable SELECT '?',name schemas_name FROM sys.schemas" SELECT * FROM #schemaTable執(zhí)行結(jié)果
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的SQL Server查询所有数据库下模式schema的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 50安时的电池从12.5伏放电到11.5
- 下一篇: mysql相邻行数据计算的自定义变量@和