SQL Server 2005 - Установка столбца как только для чтения

У меня есть поле "InsertTime" в таблице в базе данных SQL Server 2005, которая принята значение по умолчанию к "getDate ()", когда запись сначала вставляется в базу данных. Я хочу удостовериться, что этот столбец не обновляется снова.

Этот столбец может быть установлен на только для чтения или является там лучшим способом сделать это, не пишущий все sql для разработчиков?

6
задан marc_s 20 January 2010 в 06:43
поделиться

3 ответа

Запишите сохраненную процедуру обновления в эту таблицу и убедитесь, что она не коснется поля InsertTime. Затем установите все права пользователей так, чтобы они сами не могли делать необработанные Update в этой таблице, но могли вызвать сохраненную процедуру.

1
ответ дан 16 December 2019 в 21:40
поделиться

Вы можете реализовать поле «только для чтения», создавая триггер обновления, который проверяет наличие обновлений на этот столбец, а затем возвращает их обратно.

IF EXISTS (SELECT name FROM sys.objects
      WHERE name = 'ReadOnlyInsertTime_tr' AND type = 'TR')
   DROP TRIGGER dbo.ReadOnlyInsertTime_tr;
GO

CREATE TRIGGER ReadOnlyInsertTime_tr
ON dbo.MyTable
AFTER UPDATE 
AS 
IF (UPDATE(InsertTime))
BEGIN
ROLLBACK
-- Raise an informative error
-- RAISERROR (50009, 16, 10)
END;
GO
4
ответ дан 16 December 2019 в 21:40
поделиться

Вместо триггера также может выполнять эту работу.

CREATE TRIGGER [dbo].[MyTableUpdateTrigger] 
ON [dbo].[MyTable]
INSTEAD OF UPDATE
AS
BEGIN
   SET NOCOUNT ON

   UPDATE MyTable
     SET Column1 = Inserted.Column1
          ,Column2 = Inserted.Column2
          -- Don't set this for the "InsertTime" field.
    FROM Inserted
     INNER JOIN MyTable
     ON Inserted.TheKey = MyTable.TheKey
END 
1
ответ дан 16 December 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: