防止更改表sql server中列的默认值

时间:2013-05-22 06:00:40

标签: sql sql-server sql-server-2008

如何防止在sql server

中设置为默认值的列值更改

我有一个表TimeTable,其中Column是varchar(20)类型的日期我希望当用户插入值并且阻止修改/更改insert中的值时,应该使用getdate()更新该列声明或更新声明。请帮忙!

3 个答案:

答案 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()值。 如果操作是更新,则可以阻止更改此列的值。