Хранимая процедура с идентификатором области ввода-вывода - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть две таблицы, а именно User и UserRole, где я хочу передать значения через хранимые процедуры с таблицами ниже.Мне нужна помощь, как я могу создать процедуру, которая вставляет в обе таблицы, предполагая, что у пользователя есть только одна роль, т.е. либо пользователь, либо администратор.

Параметр Id, вставленный во вторую таблицу, должен быть Id таблицы пользователя.Пожалуйста, предложите мне.

CREATE TABLE [dbo].[User](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
    [Username] [nvarchar](50) NULL,
    [Password] [nvarchar](50) NULL,
)
CREATE TABLE [dbo].[UserRole](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [UserId] [int] Foreign Key References User(ID)NOT NULL,
    [Role] [nvarchar](50) NULL
)

CREATE PROCEDURE [dbo].[AddUserRole]
    @Name      VARCHAR(50),
    @Username DATETIME,
    @Password      INT,
    @Role NVARCHAR(50),
     @Id INT OUT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO [WH].[dbo].[User]
                (
                Name,
                Username,
                Password
                )
    VALUES  
                (
                @ Name, 
                @Username,
                 @Password
                );

    SET @ Id = SCOPE_IDENTITY();

INSERT INTO [WH].[dbo].[UserRole]
                (
                UserId,
                Role
                )
    VALUES  
                (
                @Id, 
                @ Role
                );
END;

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

enter image description here Теперь это работает нормально!

        CREATE TABLE [dbo].[TempUser](
        [Id] [int] IDENTITY(1,1) NOT NULL Primary key,
        [Name] [nvarchar](50) NULL,
        [Username] [nvarchar](50) NULL,
        [Password] [nvarchar](50) NULL,
    )
    CREATE TABLE [dbo].[TempUserRole](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [UserId] [int] Foreign Key References TempUser(ID)NOT NULL,
        [Role] [nvarchar](50) NULL
    )
    --ALTER TABLE TempAddUserRole DROP CONSTRAINT FK__TempUserR__UserI__503293D2;



EXEC TempAddUserRole 'Gulshan','12 sep 2018','1','Admin'
EXEC TempAddUserRole 'Gulshan','12 sep 2018','1','Admin',


ALTER PROCEDURE [dbo].[TempAddUserRole]
    @Name      VARCHAR(50),
    @Username DATETIME,
    @Password      INT,
    @Role NVARCHAR(50)

AS
BEGIN
    SET NOCOUNT ON;

     declare @Id INT 


    INSERT INTO [TempUser]
                (
                Name,
                Username,
                Password
                )
    VALUES  
                (
                @Name, 
                @Username,
                 @Password
                );

    SET @Id = SCOPE_IDENTITY();

INSERT INTO [TempUserRole]
                (
                UserId,
                Role
                )
    VALUES  
                (
                @Id, 
                @Role
                );
END;
0 голосов
/ 12 сентября 2018

Используйте метод вывода, подробно здесь

try Как-то так

DECLARE @MyTableVar table( Id int);  

INSERT INTO [WH].[dbo].[User] (Name, Username, Password)
OUTPUT INSERTED.Id  INTO @MyTableVar
VALUES  (@Name, @Username, @Password);


INSERT INTO [WH].[dbo].[UserRole] (UserId, Role )
SELECT Id, @Role FROM @MyTableVar;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...