0

SQLサーバーでデフォルトに設定された列値の変更を防ぐにはどうすればよいですか

varchar(20) 型の列が日付であるテーブル TimeTable があります。ユーザーが値を挿入し、insert ステートメントまたは update で値を変更/変更するのを防ぐために、常に 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 に答える