都内で働くSEの技術的なひとりごと

都内でサラリーマンやってます。マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。よろしくお願いします♪

便利な SQL の関数とか、構文とか、その他色々まとめてみる - その4 ( みなさんご存じのGETDATE()です。 ) -

 仕事やら、夏休みやらでなかなか記事を書くことができませんでした。気合を入れて記事を書きたいと思います。最近、SQL Server の開発現場で、よく『このテーブルいつ修正したんだろ?』というセリフをたまに聞きます。あらゆるオブジェクトの新規作成・更新などは、sys.object を参照します。(あ、DDL トリガーはスキーマ スコープではないため、sys.objects では表示されません。トリガーの場合は、sys.trigger を参照してください。)

 では、早速下記のクエリを実行してみましょう。AdventureWorks2012 データベースのユーザーテーブルで、過去30日以内に更新されたものを抽出します。

USE AdventureWorks2012
GO
SELECT [スキーマ名] = s.name,
       [オブジェクト名] = o.name,
       [オブジェクトの種類] = o.type_desc,
       [オブジェクトの新規作成日付] = o.create_date,
       [オブジェクトの修正日付] = o.modify_date
FROM sys.objects AS o
INNER JOIN sys.schemas AS s
ON o.schema_id = s.schema_id
WHERE o.type = 'U' AND o.modify_date > GETDATE() - 30
ORDER BY o.modify_date;

f:id:koogucc11:20140802161129p:plain

 sys.object の type でオブジェクトの type でオブジェクトを絞りこむことができます。ただし、ユーザーテーブルが、sys.object から抽出できるのは、SQL Server 2012 以降です。 それ以前のバージョンでは、sys.tables を使用する必要があります。あ、この記事、GETDATE() を使っただけの記事ですねww