2013-02-15 57 views
1

說的一列實施「主」 ID值,我有3個表如下所示:如何在數據庫表


PERSONID INT [PK,獨特的clust IDX,身份是]
PERSONNAME VARCHAR(50)[非空]
的ContactID INT [獨特的非clust IDX,非空,FK到聯繫表的使用ContactID柱]

公司
CompanyId INT [PK,獨特的clust IDX,身份是]
公司名稱VARCHAR(100)非空]
的ContactID INT [獨特的非clust IDX,非空,FK到聯繫表的使用ContactID列]

聯繫
的ContactID INT [PK,獨特的clust IDX,身份是]
CreatedDate DATETIME [非空,默認值GETDATE()]

我將展示在以下3個插入操作所需的最終結果(首發與所有空的桌子)...

我插入一行到人,並希望結束:

Person表 -
PERSONID 1
PERSONNAME '第一人稱'
的ContactID 1

聯繫表 -
ContactId 1
CreatedDate getdate()value

然後我插入一行到公司,並希望與落得:

公司表 - CompanyId 1
公司名稱 '一公司'
的ContactID 2

聯繫表 - ContactId 2
CreatedDate getdate()值

我在Person中插入第二行,並將wan噸到結束:

Person表 - PERSONID 2
PERSONNAME '第二人'
的ContactID 3

聯繫表 - 的ContactID 3
CreatedDate GETDATE()值

我希望上面的說明清楚了我正在努力完成的事情,即,我想使用Contact表作爲一種「唯一值生成器」類型的機制,這樣我就可以在任何時候向Person或Company插入一行(或任何額外的表,我想將類似的ContactId列插入),任何/所有這些表中的每個ContactId值都將是唯一的。

什麼是最有效的方法來實現這一目標?是否有可能通過Person和Company表上的觸發器執行此操作,以便我只能從應用程序代碼執行一次插入操作(如果是這樣,觸發器代碼將如何)?或者我總是必須從我的應用程序代碼中執行多個I/O操作,其中我首先向Contact表插入一行,返回scope_identity()值,然後將該值用於插入Person的ContactId值或公司?還是其他一種比其中任何一種更好的方法?

任何見解都非常感謝!

+0

另外,我對我的帖子的格式道歉的ContactID序列 - 我試圖用回車,但他們似乎並沒有「拿」...... – user2075599 2013-02-15 13:26:22

+0

呃......一個小問題,如何確保回車在工作崗位上「工作」?我搜索了常見問題,並沒有看到任何關於這個...... – user2075599 2013-02-15 14:04:51

回答

0

您需要爲您的ContactID和插入值sequence基於觸發器

+0

聖牛!我一直在做SQL Server 15年,我從來沒有見過CREATE SEQUENCE的東西,所以謝謝你的提示(可能對其他一些事情有用)。但是,我不確定這對我的具體情況有幫助。如果我正確地理解了CREATE SEQUENCE(檢查完你的優秀鏈接後)... – user2075599 2013-02-15 13:54:15

+0

...如果在我的場景中,Contact表甚至不存在,我需要做的就是在一個唯一的值集合中跨兩個或更多表的特定列,CREATE SEQUENCE將起作用。但我確實需要讓Contact表中的ContactId值爲「主」值,可以這麼說(實際上它將用作其他表中的FK目標)。所以在這種情況下,CREATE SEQUENCE看起來似乎不夠用(而且我仍然可能需要做一些類似於我的應用程序代碼的雙插入技術)。或者我錯過了什麼? – user2075599 2013-02-15 13:54:37

+0

您需要確保在插入人員或公司表格之前觸發器將序列的下一個值插入到聯繫人表格中,然後將序列的當前值插入實際表格中 – sasikt 2013-02-15 14:00:41