保守や調査などをしていてテーブルの全体の情報を知りたい場合や、システム切替などで本当にSQLが変更されたかなどを確認したいときによく使うSQLを備忘録として書いておきます。
SQL Serverのバージョンを知りたい場合
今接続しているSQLServerのバージョンやSQLServerのパッチレベルがどこまで適用されているかを知りたいときによく使います。
SELECT @@version
すべてテーブル一覧と列名を取得するSQL
テーブル定義などで、きちんとテーブル定義が追加されていることを確認したり、今現在存在しているテーブルをしりたいときなどに使うと便利です。除外したいテーブルがある場合はWHERE文でNOT Like やNOTで書いてやれば除外してくれます。
--テーブル一覧
select * from
(
SELECT
(select name from sys.schemas where T.schema_id = schema_id) スキーマ,
T.name AS 表名,
C.column_id AS 列番,
C.name AS 列名,
Y.name AS 型,
CASE
WHEN Y.name IN ('nvarchar', 'nchar') THEN C.max_length / 2
WHEN C.precision = 0 THEN C.max_length
ELSE C.precision
END AS 桁,
C.scale AS 小数桁,
C.max_length as [サイズ(バイト)],
C.is_nullable AS Null可,
object_definition(C.default_object_id) AS デフォルト値,
(select COUNT(*) from sys.index_columns ic where ic.column_id = C.column_id and C.object_id = ic.object_id
and exists (select * from sys.key_constraints kc where kc.type = 'PK'
and kc.parent_object_id = T.object_id
and kc.unique_index_id = ic.index_id )) as [PK],
ep.value as 説明
FROM sys.tables AS T INNER JOIN
sys.columns AS C ON T.object_id = C.object_id INNER JOIN
sys.types AS Y ON C.system_type_id = Y.system_type_id AND C.user_type_id = Y.user_type_id left OUTER JOIN
sys.extended_properties AS ep ON C.object_id = ep.major_id and C.column_id = ep.minor_id
) z
WHERE z.表名 NOT LIKE ('除外したいテーブル')
order by z.スキーマ, z.表名, z.列番
共通関数の最終更新日を確認したいとき
以下のSQLで現在登録されている共通関数の一覧を更新日順に表示してくれます。共通関数の変更などがあった場合に、使用すると確認に便利です。modify_dateが最後に定義を変更した日の値を持っているので変更漏れがないか確認したいときに便利です。
--共通関数
SELECT name,
type,
create_date,
modify_date
FROM sys.objects
WHERE type = 'FN'
ORDER BY modify_date
ストアドプロシージャーの一覧と最終更新日を確認したいとき
ストアドプロシージャーの一覧を表示したい場合は以下のように書きます。
--ストアド
SELECT name,
create_date,
modify_date
FROM sys.objects
WHERE type = 'P'
ORDER BY modify_date
登録されているViewの一覧と最終更新日を確認したいとき
Viewの場合は以下の通りです。
--View
SELECT name,
create_date,
modify_date
FROM sys.objects
WHERE type = 'V'
ORDER BY modify_date
sys.objectsテーブルは、色々な情報をもっているので知っているとかなり便利です。
コメント