2010-08-10 4 views
0

У меня есть 2 таблицы под названием login и Roles.Как добавить столбец по умолчанию в 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 как некоторые АБВ Я хотел бы заполнить то же самое uname в таблице ролей автоматически в соответствующем поле, которое я делаю как внешний ключ ...

+0

Какова точка идентификатора столбца идентификатора в имени входа, если вы делаете uname своим основным ключом? Думали ли вы о том, зачем вам нужна отдельная таблица ролей? почему допустимая строка не может быть строкой в ​​таблице входа? есть ли здесь только одно к одному? –

ответ

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

+1 для включения кода. – Tobiasopdenbrouw

3

Решение состоит в том, чтобы поместить триггер на вставках в исходную таблицу.

Этот microsoft article on triggers расскажет вам, как они работают.

+0

ваш ответ технически корректен, но конфликтует с моими религиозными взглядами на создание реляционной базы данных. –

+0

@ Ник Кавадиас: у вас не должно быть религиозных взглядов, когда дело касается баз данных ... просто мнения, основанные на фактах. Как бы вы решили этот вопрос? –

+0

@marc_s в моем прекрасном мире Я бы не де-нормализовал данные таким образом, если бы не было очень веской причины. Как я уже сказал, использование триггера - это технический способ сделать это, но зачем это делать в первую очередь? –

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