こんにちは!ども、なかぢです。
ここんとこ、連ちゃんで恐縮です。そして、今日は、凄く寒いです。。。
さて、今日は、SQLの小ネタについて書いていきたいと思います。
この業界、開発や保守をやっていて必ずと言っていいほど関係するのがデータベースとSQL
こんな事できたらよいな~とか、こうゆうのを一発で出したい!とかありませんか?
私なりに作成した(知ってたらごめんなさいw)のをピックアップしてみましたので、
ご参考までに。
※ただし、実行確認した環境は,Microsoft SQLServerに限ります。
言語:T-SQL
DB:SQLServer2008 or 2012
テーブル一覧取得
データベース内のテーブルの一覧を取得したい!時は、
1 2 |
USE [データベース名] SELECT * FROM sysobjects; |
テーブルのカラム名取得
カラムが横に長すぎてよくわかんない!となった時は、
1 2 3 4 5 6 7 8 |
SELECT syscolumns.name FROM syscolumns INNER JOIN sysobjects ON (sysobjects.id = syscolumns.id) WHERE sysobjects.name = 'テーブル名' ORDER BY index ASC |
DBのデタッチ・アタッチ
SQLServerって、GUI上からDBのデタッチ・アタッチができるけど、
稀に、掴んでいるせいなのか何なのかわからないが出来ない事、ありませんか?そんな時は、
1 2 3 4 5 6 7 8 9 10 11 12 |
--デタッチ USE master EXEC sp_detach_db[データベース名] GO --アタッチ CREATE DATABASE[データベース名] ON PRIMARY( NAME = データベース名, FILENAME = 'mdfファイルの絶対パス'), LOG ON (NAME = データベースログファイル名, FILENAME ='ldfファイルの絶対パス') FOR ATTACH GO |
実行権限一括付与
ストアドプロシージャ、テーブル値関数やスカラ関数に権限を付与するときに、纏めて一括で付与したい時は、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
USE [データベース名] GO SELECT 'GRANT EXECUTE ON OBJECT::' + SCHEMA_NAME(schema_id) +'.' + name + ' TO 付与するユーザー名' FROM sys.objects WHERE type = 'P' OR type ='FN' OR type ='IF' OR type ='TF' --出力結果を実行すればEXECUTE権限が付与される USE [データベース名] GRANT SELECT TO ユーザー名 GRANT EXECUTE TO ユーザー名 USE [データベース名] GRANT EXECUTE ON OBJECT::dbo.データベース名 TO ユーザー名 |
照合順序
テーブルの照合順序って意外な所で確認するときありませんか?そんなあなたに!
1 2 3 4 5 6 7 8 9 10 11 |
USE [データベース名] SELECT OBJECT_NAME(sys.objects.object_id) AS 'テーブル名', sys.columns.name AS 'Column Name', sys.columns.collation_name FROM sys.columns INNER JOIN sys.objects ON sys.columns.object_id = sys.objects.object_id WHERE sys.objects.type = 'U' ORDER BY OBJECT_NAME(sys.objects.object_id).sys.columns.name |
xp_cmdshell
SQL上から、OSコマンドを実行出来たらな~と思ったそこのあなた!こちらを使えば実現できますよ。
1 2 3 4 5 6 7 8 9 10 11 12 |
-- 拡張オプションを有効にする EXEC sp_configure 'show advanced options',1 GO -- 反映 RECONFIGURE GO -- xp_cmdshellを有効にする EXEC sp_configure 'xp_cmdshell',1 GO --反映 RECONFIGURE GO |
ブロッキング情報
データベースの突然のデッドロックが発生!ブロックしているプロセスIDを知りたい時は、こちらをどうぞ。
1 2 3 4 5 6 7 8 9 |
SELECT resource_type AS 'オブジェクトの種類' resorce_associated_entity_id AS 'エンティティID' request_mode AS 'ロックの種類' request_status AS 'ステータス状態' FROM sys.dm_tran_locks WHERE [resorce_type] <> 'DATABASE' |
如何でしたでしょうか? ほかにも、BulkInsertや双方向デュプリケーションなどの方法もありますが、今回はこんな感じで。(知りたい方は聞いてください♪教えます。)
次回は、番外編ということで、私のもう一つの顔、「猟師」について、書きたいと思います。 乞うご期待!