2010-05-18 4 views
5

Какой самый чистый способ ограничить таблицу SQL, чтобы она имела не более одной строки?Ограничить таблицу только одной строкой

This related question обсуждает, почему такая таблица может существовать, но не следует использовать ограничение.

До сих пор я нашел только хаки с уникальным ключевым столбцом, который ограничен определенным значением, например. ALWAYS_0 TINYINT NOT NULL PRIMARY KEY DEFAULT (0) CONSTRAINT CHECK_ALWAYS_0 CHECK (ALWAYS_0 = 0). Я предполагаю, что есть, вероятно, более чистый способ сделать это.

Идеальным решением было бы портативный SQL, но решение специфичны для MS SQL Server или Postgres также будет полезным

ответ

1

Я просто решил такую ​​же проблему на SQL Server 2008, создав таблицу с вычисляемого столбца и ввода первичного ключа на этой колонке:

CREATE TABLE MyOneRowTable (
    [id] AS (1) PERSISTED NOT NULL CONSTRAINT pk_MyOneRowTable PRIMARY KEY, 
    -- rest of the columns go here 
); 
+0

Не знаю об этой функции, спасибо! – finnw

+0

Рад помочь. Вы даже можете сделать значение комментарием, например '[id] AS ('table_should_only_have_one_row')'. – SQB

4

Чистейший путь (я думаю) был бы ON INSERT триггер, который генерирует исключение (таким образом предотвращая строка из вставленной). Это также дает клиентскому приложению возможность восстановить изящно.

+1

+1. Мне нравится это решение, потому что я могу вернуть собственное сообщение об ошибке, которое объясняет, почему вставка не разрешена. Сообщения об ошибках, генерируемые другими решениями, могут вводить в заблуждение. – finnw

1

Использование Грант для удаления разрешений для тех, кто вставить в таблицу после добавления одной строки

Ваш дБА будет иметь возможность вставлять, но дБА должны быть только работает изменения схемы, которые проверяются так не должно быть проблемой на практике

Смежные вопросы