In: Computer Science
SQL stored procedures
Create 2 stored procedures: sp_AddNewUser and sp_AddNewRole. Use
the ManyToMany script as your base table structures.
The stored procedure should accept the parameters needed to input
the data for each table.
NOTE: You do not need to input the UserID or RoleID. These are
surrogate keys and the system automatically inserts them when you
insert a row in the tables.
On execution, the stored procedure should check the database to see
if the user exists, if so, return a message that says so. If the
user does not exist, it should insert the information for a new
user. Then do the same thing (in a different stored procedure) for
the Role.
many to many script:
Create database ManyToMany
-- use master
-- drop database ManyToMany
go
use ManyToMany
go
-- Create tables to be used for the discussion
CREATE TABLE [dbo].[tblUsers](
[Userid] [int] IDENTITY(100,1) NOT NULL PRIMARY
KEY,
[username] [varchar](32) NOT NULL,
[password] [varchar](32) NOT NULL,
[FName] [varchar](32) NULL,
[LName] [varchar](32) NULL,
[MName] [varchar](32) NULL,
[eMail] [varchar](128) NOT NULL,
[Phone] [varchar](16) NULL
)
go
CREATE TABLE [dbo].[tblRoles](
[RoleID] [int] IDENTITY(100,1) NOT NULL PRIMARY
KEY,
[Role] [varchar](32) NOT NULL
)
go
CREATE TABLE [dbo].[tblUserRoles](
[RoleID] [int] NOT NULL,
[UserID] [int] NOT NULL
) ON [PRIMARY]
go
-- Add the foreign keys to the userroles table for data integrity
alter table tblUserRoles add constraint FK_Users Foreign Key
(UserID) references tblUsers(UserID)
alter table tblUserRoles add constraint FK_Roles Foreign Key
(RoleID) references tblRoles(RoleID)
go
-- insert sample data to the tblRoles Table
insert into tblRoles values ('Employee')
insert into tblRoles values ('Manager')
insert into tblRoles values ('Salesman')
insert into tblRoles values ('Security')
go
-- Insert sample data ti the tblUsers table
insert into tblUsers
([username],[password],[FName],[LName],[eMail],[Phone])
values ('derf', 'password1',
'Fred','Flintstone','[email protected]','555-1234')
insert into tblUsers
([username],[password],[FName],[LName],[eMail],[Phone])
values ('bam', 'bambam',
'Babbam','Rubble','[email protected]','555-5489')
insert into tblUsers
([username],[password],[FName],[LName],[eMail],[Phone])
values ('boss', 'bigboss',
'Sylvester','Slate','[email protected]','555-0258')
go
-- this is a script block used to get valid key values for the
relationships
-- between the tables and the rows.
begin
declare @user int
declare @role int
set @user = (select userid from tblUsers where username =
'derf')
set @role = (select RoleID from tblRoles where Role =
'Employee')
insert into tblUserRoles (RoleID,UserID) values(@role,@user)
set @user = (select userid from tblUsers where username =
'bam')
insert into tblUserRoles (RoleID,UserID) values(@role,@user)
set @user = (select userid from tblUsers where username =
'boss')
insert into tblUserRoles (RoleID,UserID) values(@role,@user)
set @user = (select userid from tblUsers where username =
'derf')
set @role = (select RoleID from tblRoles where Role =
'Manager')
insert into tblUserRoles (RoleID,UserID) values(@role,@user)
set @user = (select userid from tblUsers where username =
'boss')
insert into tblUserRoles (RoleID,UserID) values(@role,@user)
set @role = (select RoleID from tblRoles where Role =
'Salesman')
insert into tblUserRoles (RoleID,UserID) values(@role,@user)
end
go
-- see the results
select * from tblUsers
select * from tblRoles
select * from tblUserRoles
Please see the below querry:
CREATE PROCEDURE sp_AddNewUser(
@username as varchar(32) ,
@password as varchar(32),
@FName as varchar(32),
@LName as varchar(32),
@MName as varchar(32),
@eMail as varchar(32),
@Phone as varchar(32)
)
AS
BEGIN
IF not EXISTS (SELECT 1 FROM tblUsers WHERE @username = USERNAME)
BEGIN
INSERT INTO tblUsers
values( @username,@password,@FName,@LName,@MName,@eMail,@Phone )
END
ELSE
BEGIN
RAISERROR('=============================', 0, 1);
RAISERROR('USERNAME ALREDY EXISTS', 0, 1);
RAISERROR('=============================', 0, 1);
END
END
CREATE PROCEDURE sp_AddNewRole(
@Role as varchar(32)
)
AS
BEGIN
IF NOT EXISTS (SELECT 1 FROM tblRoles WHERE Role = @Role)
BEGIN
INSERT INTO tblRoles
values( @Role )
END
ELSE
BEGIN
RAISERROR('=============================', 0, 1);
RAISERROR('USER ROLE ALREDY EXISTS', 0, 1);
RAISERROR('=============================', 0, 1);
END
END