2010-05-18 77 views
5

限制SQL表的最簡潔方法是讓它只有一行嗎?限制一個表只有一行

This related question討論了爲什麼可能存在這樣的表格,但不討論應該如何實施約束。

到目前爲止,我只發現涉及被限制爲具有特定值的唯一鍵列的hack,例如, 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 2016-10-24 07:08:45

+0

很高興提供幫助。您甚至可以將該值作爲註釋,例如'[id] AS('table_should_only_have_one_row')'。 – SQB 2016-10-24 07:12:03

4

最乾淨的方式(我認爲)將是一個ON INSERT觸發拋出異常(從而防止從插入的行)。這也爲客戶端應用程序提供了一個良好恢復的機會。

+1

+1。我喜歡這個解決方案,因爲我可以返回一個自定義錯誤消息,解釋爲什麼不允許插入。其他解決方案生成的錯誤消息可能會造成混淆。 – finnw 2010-05-18 12:33:03

1

使用准許刪除權限,任何人都可以加入一個行後插入到表

你的DBA就可以插入,但DBA應該只是運行的檢查所以應該不會有問題的架構更改在實踐中

相關問題