如何防止更改在 sql server 中设置为默认值的列值
我有一个表时间表,其中列是日期,类型为 varchar(20) 我希望在用户插入值时始终使用 getdate() 更新该列并防止修改/更改插入语句或更新中的值陈述。请帮忙!
如何防止更改在 sql server 中设置为默认值的列值
我有一个表时间表,其中列是日期,类型为 varchar(20) 我希望在用户插入值时始终使用 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() 值。如果操作是更新,那么您可以防止更改此列的值。