0

如何防止更改在 sql server 中设置为默认值的列值

我有一个表时间表,其中列是日期,类型为 varchar(20) 我希望在用户插入值时始终使用 getdate() 更新该列并防止修改/更改插入语句或更新中的值陈述。请帮忙!

4

3 回答 3

1

使用视图 + 触发器 -

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
于 2013-05-22T06:18:09.640 回答
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示例

于 2013-05-22T06:15:54.997 回答
0

我认为使用触发器将是做到这一点的好方法。在此触发器中,如果操作为插入,则您可以在使用 to_char() 将格式更改为 char 后插入 gatdate() 值。如果操作是更新,那么您可以防止更改此列的值。

于 2013-05-22T06:10:20.300 回答