如何防止在sql server
中设置为默认值的列值更改我有一个表TimeTable,其中Column是varchar(20)类型的日期我希望当用户插入值并且阻止修改/更改insert中的值时,应该使用getdate()更新该列声明或更新声明。请帮忙!
答案 0 :(得分:1)
使用触发器。它可能看起来像这样
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 示例
答案 1 :(得分:1)
使用view + trigger -
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
答案 2 :(得分:0)
我认为使用触发器将是很好的方法来做到这一点。在此触发器中,如果opration是insert,则可以在使用to_char()将格式更改为char后插入gatdate()值。 如果操作是更新,则可以阻止更改此列的值。