布団が俺を呼んでいる

丘山大一のぶろぐ

SQL Server sp_MSforeachdb を使う

こんなんあったんですね。便利。

用例

CREATE TABLE #RESULT_TABLE
(
DBNAME nvarchar(30)
)
EXEC sys.sp_MSforeachdb 'USE ?;INSERT INTO #RESULT_TABLE SELECT DB_NAME() '
SELECT * FROM #RESULT_TABLE;
DROP TABLE #RESULT_TABLE

インスタンス内のテーブル一覧が単一のデータセットで拾えるぜひゃっほい。

こんなやり方してました

まあこれはこれで利用できることあるんですが。


SQL Server 2016の教科書 開発編

新品価格
¥3,888から
(2016/9/26 21:15時点)

コメントを書く

布団が俺を呼んでいる | SQL Server の 容量を取得する

布団が俺を呼んでいる

丘山大一のぶろぐ

SQL Server の 容量を取得する

SQL Server の容量・サイズとは何を指すのか。
よくわからない。
よって、ここに書いてあることもわりと適当。
大体あっているといいなあ。

GUI で見るとき

Management Studio で データベース上で右クリック、
コンテキストメニュー「プロパティ」-「全般」から見るとき。
・サイズ: MDF + LDF ファイルの大きさ。
・使用可能領域:サイズ - (MDF ファイル内で既に使用されている領域 + LDF ファイル内で既に使用されている領域)

コンテキストメニュー「プロパティ」-「ファイル」から見るとき。
・初期サイズ(MB):現在のファイルの大きさ。ファイル単位。上記のサイズ = 初期サイズ(MB)の合計

SQLで確認するとき

SELECT file_id, name, type_desc, physical_name, size FROM sys.database_files ;  
・コンテキストメニュー「プロパティ」-「ファイル」から見るとき。 に相当。

SELECT sum(size) from dbo.sysfiles
もしくは
SELECT CONVERT(numeric(18,2), sum(size)*8192/1048576) from dbo.sysfiles
・コンテキストメニュー「プロパティ」-「全般」から見るとき。 サイズ。 に相当。
・このクエリの「size」 は8KBページ単位なので、おおざっぱに計算してやった方が見やすい。

select CONVERT(numeric(18,2),FILEPROPERTY(file_name(fileid),'SpaceUsed')*8192.0/power(1024.0,2)) from dbo.sysfiles where fileid = 1
・データベースのMDF のうち、使用済の領域。
・除算かませているので若干結果が怪しくなる。

EXEC sp_spaceused
・これまで上記で書いてきた情報をまとめてとれる感じ。(ファイルごとのサイズはとれないけど……)
・使用済の領域についてはコッチの方が正確な気がする。(根拠なし)
・結果セットができるストアド ということもあり、軽く見る分には便利だが他の処理には組み込みにくい。


ところで

「SQL」という単語と「クエリ」という単語がごっちゃになっています。
ゴフ(吐血
分かっているけど使い分けられない。




SQL Server 2016の教科書 開発編

新品価格
¥3,888から
(2016/9/26 21:15時点)

コメントを書く