2010-08-10 54 views
0

我有兩個表,分別叫做loginRoles如何在sql server 2005中默認添加列

login表,我有以下字段:

CREATE TABLE [dbo].[login] 
    ([Id] [int] IDENTITY(1,1) NOT NULL, 
[Uname] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
[Pwd] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 

    CONSTRAINT [PK_login_1] PRIMARY KEY CLUSTERED([Uname] ASC) 

roles表我有這些領域:

CREATE TABLE [dbo].[Roles] 
    ([Uname] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
[Valid] [int] NOT NULL 
) 

現在我需要的是,如果我填的是uname一些XYZ我想填寫相同的uname在角色表中相應的字段,我作爲外鍵...

+0

如果您將unkey設爲主鍵,登錄時id標識列的要點是什麼?你有沒有想過爲什麼你需要一個單獨的角色表?爲什麼不能在登錄表中成爲一行?這裏只有一對一映射嗎? – 2010-08-10 07:37:17

回答

3

你可以使用觸發器來做到這一點。您可能會或可能不希望在一個Insert和/或Update更多細節上的觸發器執行該代碼可以發現here

CREATE TRIGGER trgInsertUserIntoRoles ON Login 

FOR Insert 

AS  

INSERT INTO Roles (UName, Valid) 
SELECT Uname, 1  
FROM Inserted 

雖然我認爲這將是更好,如果你剛添加的代碼中插入用戶名進入存儲過程中的Roles表創建用戶。

此外,你知道你正在master數據庫上創建所有這些?

+0

用於包含代碼。 – Tobiasopdenbrouw 2010-08-10 08:04:12

3

一個解決方案是將觸發器插入到原始表中。

這個microsoft article on triggers會告訴你他們是如何工作的。

+0

你的答案在技術上是正確的,但與我建立關係數據庫的宗教觀點相沖突。 – 2010-08-10 07:36:16

+0

@Nick Kavadias:在數據庫方面你不應該有任何宗教觀點......只是基於事實的意見。你將如何解決這個問題呢? – 2010-08-10 07:42:12

+0

@marc_s在我的完美世界中,除非有很好的理由,否則我不會以這種方式去規範化數據。就像我說的那樣,使用觸發器是做這件事的技術方式,但爲什麼要這麼做呢? – 2010-08-11 06:41:33

相關問題