Распространение вставок в несколько баз данных - PullRequest
0 голосов
/ 11 марта 2012

У меня есть простая база данных следующей формы:

   Users{
    UserID (PK)
    Username
    Email
    FirstName
    SecondName
   }

   Groups{
    GroupID (PK)
    GroupName
   }

   Membership{
    UserID (FK)
    GroupID (FK)
   }

Членство - это промежуточное звено для двух других таблиц. Когда пользователь регистрируется, его имя пользователя вставляется в таблицу «Пользователи и группы» (создавая группу самостоятельно). UserID и GroupID должны ссылаться на соответствующие столбцы в Users и Groups.

Это лучший способ сделать это просто с помощью трех операторов INSERT INTO, когда пользователь регистрируется, например:

if (db.Execute("INSERT INTO Users(Username, Email, FirstName, SecondName) VALUES(@0,@1,@2,@3)", username, email, firstName, secondName) < 1
                || db.Execute("INSERT INTO Groups(GroupName) VALUES(@0)", username) < 1
                || db.Execute("INSERT INTO Membership(UserID, GroupID) VALUES(@0, @1)",?????????????) < 1)
            {
                <p class="error">Wasn't able to insert User record</p>//insert failed
            }else {
            Response.Redirect("Success.cshtml"); //success
            }

Что я должен вставить в третий оператор INSERT INTO, чтобы он правильно вставлял ID пользователя и соответствующий groupID?

1 Ответ

2 голосов
/ 11 марта 2012

Это логика базы данных ... поместите ее в базу данных.

CREATE PROCEDURE dbo.AddUserAndGroup
  @username   NVARCHAR(255),
  @email      VARCHAR(320),
  @firstname  NVARCHAR(32),
  @secondName NVARCHAR(32)
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @UserID INT, @GroupID INT;

  INSERT dbo.Users(Username, Email, FirstName, SecondName)
    SELECT @username, @email, @firstname, @secondname;

  SELECT @UserID = SCOPE_IDENTITY();

  -- could probably simply rest with OUTPUT, just keeping it simple/consistent

  INSERT dbo.Groups(GroupName) SELECT @username;

  SELECT @GroupID = SCOPE_IDENTITY();

  INSERT dbo.Membership(UserID, GroupID) SELECT @UserID, @GroupID;
END
GO

Теперь вы можете сказать что-то вроде этого (извините, если у меня неверный синтаксис вашего клиента, ноЯ пытаюсь приблизиться):

if (db.Execute("EXEC dbo.AddUserAndGroup @0,@1,@2,@3;", 
    username, email, firstName, secondName) < 1
{
  <p class="error">Wasn't able to insert User record</p>//insert failed
}
else
{
  Response.Redirect("Success.cshtml"); //success
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...