SQLサーバーでデフォルトに設定された列値の変更を防ぐにはどうすればよいですか
varchar(20) 型の列が日付であるテーブル TimeTable があります。ユーザーが値を挿入し、insert ステートメントまたは update で値を変更/変更するのを防ぐために、常に getdate() で列を更新する必要があります。声明。助けてください!
SQLサーバーでデフォルトに設定された列値の変更を防ぐにはどうすればよいですか
varchar(20) 型の列が日付であるテーブル TimeTable があります。ユーザーが値を挿入し、insert ステートメントまたは update で値を変更/変更するのを防ぐために、常に getdate() で列を更新する必要があります。声明。助けてください!
ビュー + トリガーを使用 -
CREATE TABLE dbo.TestTable
(
ID INT IDENTITY(1,1) PRIMARY KEY
, ProductName VARCHAR(25)
, PurchargeDate DATETIME DEFAULT(GETDATE())
)
GO
CREATE VIEW dbo.vw_TestTable
AS
SELECT
ID
, ProductName
, PurchargeDate
FROM dbo.TestTable
GO
CREATE TRIGGER dbo.trg_IOIU_TestTable
ON dbo.vw_TestTable
INSTEAD OF INSERT, UPDATE
AS BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.TestTable(ProductName)
SELECT i.ProductName
FROM INSERTED i
LEFT JOIN dbo.TestTable t ON t.ID = i.ID
WHERE t.ID IS NULL
UPDATE t
SET ProductName = i.ProductName
FROM dbo.TestTable t
JOIN INSERTED i ON t.ID = i.ID
END
GO
そのためにトリガーを使用します。このように見えるかもしれません
CREATE TRIGGER tg_default_value ON TimeTable
FOR INSERT, UPDATE
AS
UPDATE t
SET t.[Column] = GETDATE()
FROM TimeTable t JOIN INSERTED i
ON t.ID = i.ID;
SQLFiddle の例を参照してください
これを行うには、トリガーを使用するのが良い方法だと思います。このトリガーでは、操作が挿入されている場合、to_char() を使用して形式を char に変更した後、gatdate() 値を挿入できます。操作が更新の場合、この列の値を変更できないようにすることができます。