SQL Serverで列のデフォルト値を現在の日付に自動設定!3つの方法とサンプルコードを徹底解説
SQL Server で列のデフォルト値として現在の日付を使用する
構文
以下の構文を使用して、列のデフォルト値として現在の日付を設定できます。
CREATE TABLE table_name (
column_name data_type DEFAULT(GETDATE())
);
または
ALTER TABLE table_name
ALTER COLUMN column_name SET DEFAULT(GETDATE());
説明:
CREATE TABLE
: 新しいテーブルを作成します。ALTER TABLE
: 既存のテーブルを変更します。table_name
: テーブルの名前を置き換えます。column_name
: デフォルト値を設定する列の名前を置き換えます。data_type
: 列のデータ型を指定します。DEFAULT(GETDATE())
: 列のデフォルト値をGETDATE()
関数に設定します。GETDATE()
関数は、現在の時刻を返します。
例
次の例では、Customers
という名前のテーブルを作成し、CreateDate
という名前の列にデフォルト値として現在の日付を設定します。
CREATE TABLE Customers (
CustomerID INT IDENTITY PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
Email NVARCHAR(100) NOT NULL,
CreateDate DATE DEFAULT(GETDATE())
);
このコードを実行すると、Customers
という名前のテーブルが作成され、次の列が含まれます。
CustomerID
: 自動的に増分される主キー列FirstName
: 顧客のファーストネームを格納する列Email
: 顧客の電子メール アドレスを格納する列CreateDate
: 顧客レコードが作成された日時を格納する列
新しいレコードが Customers
テーブルに挿入されると、CreateDate
列には自動的に現在の日付が挿入されます。
留意点
- デフォルト値として現在の日付を使用する列は、
DATE
、DATETIME2
、DATETIMEOFFSET
のいずれかのデータ型である必要があります。 GETDATE()
関数は、現在の時刻だけでなく、現在の日付も返します。したがって、CreateDate
列のような日付のみを格納する列にデフォルト値として使用する場合は、GETDATE()
関数から時間部分を切り捨てる必要があります。これを行うには、FLOOR(GETDATE())
関数を使用できます。- 列のデフォルト値として現在の日付を使用すると、その列の値を後で手動で更新することはできません。
列のデフォルト値として現在の日付を設定する方法は他にもあります。以下に、いくつかの例を示します。
CURRENT_TIMESTAMP
キーワードを使用する: これはGETDATE()
関数と同じですが、より簡潔な構文です。
CREATE TABLE Customers (
CustomerID INT IDENTITY PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
Email NVARCHAR(100) NOT NULL,
CreateDate DATE DEFAULT(CURRENT_TIMESTAMP)
);
SYSDATETIME()
関数を使用する: これはGETDATE()
関数と似ていますが、UTC 日時を返します。
CREATE TABLE Customers (
CustomerID INT IDENTITY PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
Email NVARCHAR(100) NOT NULL,
CreateDate DATE DEFAULT(SYSDATETIME())
);
GETDATE() 関数を使用する
CREATE TABLE Customers (
CustomerID INT IDENTITY PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
Email NVARCHAR(100) NOT NULL,
CreateDate DATE DEFAULT(GETDATE())
);
CURRENT_TIMESTAMP キーワードを使用する
この例は、上記と同じですが、CURRENT_TIMESTAMP
キーワードを使用して GETDATE()
関数をより簡潔に記述しています。
CREATE TABLE Customers (
CustomerID INT IDENTITY PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
Email NVARCHAR(100) NOT NULL,
CreateDate DATE DEFAULT(CURRENT_TIMESTAMP)
);
SYSDATETIME() 関数を使用する
この例では、CreateDate
列にデフォルト値として UTC 日時を設定するために SYSDATETIME()
関数を使用しています。
CREATE TABLE Customers (
CustomerID INT IDENTITY PRIMARY KEY,
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
Email NVARCHAR(100) NOT NULL,
CreateDate DATE DEFAULT(SYSDATETIME())
);
- 上記の例では、
Customers
という名前のテーブルを作成しています。 FirstName
列とLastName
列は、顧客の名前を格納します。- 列のデフォルト値として現在の日付を設定するには、
DEFAULT
キーワードを使用します。 GETDATE()
,CURRENT_TIMESTAMP
,SYSDATETIME
関数は、現在の日付または時刻を返します。
トリガーを使用して、新しいレコードが挿入されるたびに列に現在の日付を自動的に挿入することができます。この方法は、列のデフォルト値を変更せずに現在の日付を列に設定したい場合に役立ちます。
CREATE TRIGGER SetCreateDateOnInsert
ON Customers
AFTER INSERT
AS
BEGIN
UPDATE Customers
SET CreateDate = GETDATE()
WHERE CustomerID IN (SELECT INSERTED.CustomerID FROM INSERTED);
END;
ビューを使用する
ビューを使用して、列に現在の日付を含む新しい列を作成することができます。この方法は、既存のテーブルを変更せずに、クエリで現在の日付にアクセスしたい場合に役立ちます。
CREATE VIEW CustomersWithCreateDate AS
SELECT CustomerID, FirstName, LastName, Email, GETDATE() AS CreateDate
FROM Customers;
ストアド プロシージャを使用する
ストアド プロシージャを使用して、新しいレコードを挿入し、同時に列に現在の日付を設定することができます。この方法は、レコードの挿入と現在の日付の設定を論理的にグループ化したい場合に役立ちます。
CREATE PROCEDURE CreateCustomer
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@Email NVARCHAR(100)
AS
BEGIN
INSERT INTO Customers (FirstName, LastName, Email, CreateDate)
VALUES (@FirstName, @LastName, @Email, GETDATE());
END;
定期ジョブを使用する
定期ジョブを使用して、既存の列の値を現在の日付に定期的に更新することができます。この方法は、既存のデータに現在の日付を遡及的に設定したい場合に役立ちます。
SQL Server エージェントを使用して、既存の列の値を現在の日付に更新するスクリプトを実行する定期ジョブを作成することができます。
.NET Framework または ADO.NET を使用する
.NET Framework または ADO.NET を使用して、C# などのプログラミング言語から SQL Server に接続し、新しいレコードを挿入し、同時に列に現在の日付を設定することができます。
この方法は、アプリケーションから SQL Server データにアクセスする必要がある場合に役立ちます。
sql sql-server