Я обновляю некоторый набор записей в той таблице, после этого я должен сделать эту таблицу только для чтения.
Таким образом, как сделать таблицу Read Only in SQL Server?
Номер 3, вероятно, является наилучшей практикой . Например, если ваше соединение - db_owner, например, то триггер может отключить триггер или в любом случае переместить таблицу в другую файловую группу.
Если вы хотите, чтобы он был доступен только для чтения, но все же хотите иметь возможность редактировать таблицу позже, вы можете рассмотреть создание нескольких пользователей для базы данных и предоставление различных разрешений этой базе данных - в идеале вы должны делать это в любом случае и не разрешать общедоступному доступу изменять таблицу, усекать и т. д.
Простая альтернатива, которая блокирует обновление и вставку в определенную таблицу, но все же позволяет удаление:
ALTER TABLE mytable WITH NOCHECK ADD CONSTRAINT chk_read_only CHECK( 1 = 0 )
Имейте в виду: это позволяет избежать операций INSERT и UPDATE, но позволяет УДАЛЯЕТ.
Если вам действительно нужно, чтобы таблица была доступна только для чтения, вы также можете:
a) поместить ее в отдельную базу данных или
b) поместить ее в группу файлов и отметить, что только для чтения, вот как:
USE [master]
GO
ALTER DATABASE [csvtosp] ADD FILEGROUP [READONLYTABLES]
GO
ALTER DATABASE [csvtosp] ADD FILE ( NAME = N'mydb_readonly_tables', FILENAME = N'G:\SQL2005DATA\mydb_readonly_tables.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) TO FILEGROUP [READONLYTABLES]
GO
USE csvtosp
GO
DROP TABLE mytable
CREATE TABLE mytable (
somedata char(8000) not null
) ON READONLYTABLES
GO
Для получения дополнительных сведений по этому вопросу перейдите сюда: