Я обновляю некоторый набор записей в этой таблице, после чего мне нужно сделать эту таблицу только для чтения.
Итак, как сделать таблицу только для чтения в SQL Server?
Я обновляю некоторый набор записей в этой таблице, после чего мне нужно сделать эту таблицу только для чтения.
Итак, как сделать таблицу только для чтения в SQL Server?
Простая альтернатива, которая блокирует обновление и вставляет в определенную таблицу, но все же позволяет удалять:
ALTER TABLE mytable WITH NOCHECK ADD CONSTRAINT chk_read_only CHECK( 1 = 0 )
Знайте: это позволяет избежать INSERT и UPDATE, но позволяет DELETE.
Если вам действительно нужна таблица, которая действительно читается, вы также можете:
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
Подробнее об этом можно узнать здесь:
Число 3, вероятно, является лучшей практикой. Например, если ваше соединение является db_owner, например, триггер может отключить триггер или переместить таблицу в другую файловую группу в любом случае.
Если вы хотите, чтобы это было прочитано только для широкой публики, но все же хотите иметь возможность редактировать таблицу позже, вам может потребоваться создать несколько пользователей для базы данных и предоставить разные разрешения для этой базы данных - в идеале вы должны делать это в любом случае и не разрешать доступ общего доступа к изменению таблицы, усечению и т.д.