syscolumnsテーブルを使用してレコードの最終更新時刻を取得する
SQL Server 2000でレコードの最終更新時刻を取得する方法
syscolumns
テーブルには、各列に関する情報が格納されています。このテーブルには、last_update_time
という列があり、レコードが最後に更新された時刻が格納されています。
SELECT last_update_time
FROM syscolumns
WHERE id = <column_id>
AND object_id = <table_id>;
UPDATED 列を使用する
timestamp
データ型を持つ列には、レコードが最後に更新された時刻が自動的に格納されます。この列を直接参照することで、レコードの最終更新時刻を取得できます。
SELECT updated
FROM <table_name>
WHERE <condition>;
トリガーを使用する
レコードが更新されるたびに、トリガーを実行して、最終更新時刻を記録するテーブルを作成できます。
CREATE TRIGGER update_timestamp
ON <table_name>
AFTER UPDATE
AS
BEGIN
UPDATE <timestamp_table>
SET last_updated = GETDATE()
WHERE id = <record_id>;
END;
変更追跡を使用する
SQL Server 2000では、変更追跡機能を使用して、レコードの変更履歴を記録できます。この機能を使用すると、レコードが最後に更新された時刻を取得できます。
USE <database_name>;
GO
EXEC sp_enable_change_tracking;
GO
SELECT *
FROM change_tracking_details
WHERE object_id = <table_id>
AND operation = 2;
注意点
syscolumns
テーブルを使用する方法では、レコードが最後に更新された時刻のみを取得できます。更新されたユーザーやアプリケーションなどの情報は取得できません。
syscolumns テーブルを使用する
-- テーブル名と列名を取得
SELECT name AS テーブル名, col.name AS 列名
FROM sys.tables AS t
INNER JOIN sys.columns AS col ON t.object_id = col.object_id
WHERE t.name = 'テーブル名'
AND col.name = '列名';
-- レコードの最終更新時刻を取得
SELECT last_update_time AS 最終更新時刻
FROM syscolumns
WHERE id = (SELECT column_id FROM sys.columns WHERE name = '列名' AND object_id = OBJECT_ID('テーブル名'))
AND object_id = OBJECT_ID('テーブル名');
UPDATED 列を使用する
-- レコードの最終更新時刻を取得
SELECT updated AS 最終更新時刻
FROM テーブル名
WHERE <条件>;
トリガーを使用する
-- トリガーを作成
CREATE TRIGGER update_timestamp
ON テーブル名
AFTER UPDATE
AS
BEGIN
-- 更新された時刻を記録
UPDATE timestamp_table
SET last_updated = GETDATE()
WHERE id = <record_id>;
END;
-- レコードの最終更新時刻を取得
SELECT last_updated AS 最終更新時刻
FROM timestamp_table
WHERE id = <record_id>;
変更追跡を使用する
-- 変更追跡を有効にする
USE <database_name>;
GO
EXEC sp_enable_change_tracking;
GO
-- レコードの最終更新時刻を取得
SELECT *
FROM change_tracking_details
WHERE object_id = OBJECT_ID('テーブル名')
AND operation = 2;
システムビューを使用する
SELECT last_updated_time
FROM sys.dm_db_index_operational_stats
WHERE index_id = <index_id>;
拡張ストアドプロシージャを使用する
レコードの最終更新時刻を取得する拡張ストアドプロシージャを作成できます。
CREATE PROCEDURE get_last_updated_time
AS
BEGIN
DECLARE @last_updated_time datetime;
SELECT @last_updated_time = last_update_time
FROM syscolumns
WHERE id = <column_id>
AND object_id = <table_id>;
RETURN @last_updated_time;
END;
-- 拡張ストアドプロシージャを実行
EXEC get_last_updated_time;
T-SQL スクリプトを使用する
-- テーブル名と列名を取得
DECLARE @table_name sysname, @column_name sysname;
SELECT @table_name = 'テーブル名', @column_name = '列名';
-- レコードの最終更新時刻を取得
DECLARE @last_updated_time datetime;
SELECT @last_updated_time = last_update_time
FROM syscolumns
WHERE id = (SELECT column_id FROM sys.columns WHERE name = @column_name AND object_id = OBJECT_ID(@table_name))
AND object_id = OBJECT_ID(@table_name);
-- 結果を出力
SELECT @last_updated_time AS 最終更新時刻;
sql-server