我有两张桌子
Branch (Branch_No, Branch_Name)
Admin (Admin_No, Admin_Name,Admin_Phone,Branch_No)
分支表应具有以下值
Branch_No Branch_Name
1 Inala
2 Richlands
3 Forest Lake
现在,我想要注册一个新的管理员,通过选择branch_name from branch table将他分配到一个特定的分支。
为了让它更清楚,如果我想注册一个新的管理员,这是我想要做的
Enter Admin_Name: Raef
Enter Admin_Phone: 01711182097
Choose your Branch: Richlands [This value will be selected from Branch table]
完成注册后,我希望使用SELECT * FROM Admin查看以下输出:
Admin_No Admin_Name Admin_Phone Branch_No
1 Raef 01711182097 2
我想得到上面的最终结果,在注册新管理员时选择一个branch_name =‘Richland’。我想通过SQL Server存储过程来实现这个结果。
到目前为止,我所做的是:
首先,我创建了Branch表并插入了值
CREATE TABLE Branch
(Branch_No INTEGER IDENTITY(1,1) PRIMARY KEY,
Branch_Name VARCHAR(50) NOT NULL
)
INSERT INTO Branch (Branch_Name)
VALUES('Inala')
INSERT INTO Branch (Branch_Name)
VALUES('Richlands')
INSERT INTO Branch (Branch_Name)
VALUES ('Forest Lake')
然后我创建了Admin表
CREATE TABLE Admin
(Admin_No INTEGER IDENTITY(1,1) PRIMARY KEY,
Admin_Name VARCHAR(50) NOT NULL,
Admin_Phone VARCHAR(20) NOT NULL,
Branch_No INTEGER NOT NULL FOREIGN KEY REFERENCES Branch(Branch_No)
)
然后,我创建了一个用于注册新管理员的存储过程。
CREATE PROCEDURE AddAdmin
@AdminNo INTEGER OUTPUT,
@AdminName VARCHAR(50),
@AdminPhone VARCHAR(20),
@BranchName VARCHAR(20),
@BranchNo INTEGER OUTPUT
AS
BEGIN
SET @AdminNo = SCOPE_IDENTITY()
INSERT INTO Admin (Branch_No)
SELECT Branch.Branch_No FROM Branch,Admin
WHERE Branch.Branch_No = Admin.Branch_No
AND Branch_Name = @BranchName
INSERT INTO Admin (Admin_Name,Admin_Phone)
VALUES (@AdminName,@AdminPhone)
END
已成功创建存储过程
然后,我尝试执行存储过程,以便注册一个新的管理员
EXECUTE AddAdmin 'Raef','01711182097','Richlands'
我得到了以下错误消息:
Msg 8114, Level 16, State 5, Procedure AddAdmin, Line 41
Error converting data type varchar to int.
我几乎可以肯定,我所创建的存储过程中的逻辑语法存在错误。如果存储过程逻辑语法是固定的,这将对我非常有帮助。
发布于 2018-08-01 15:32:25
你不需要插入管理员号码,因为你已经将其设置为身份,如果我穿着你的衣服在你的电脑上工作,我会这样做:
CREATE PROCEDURE AddAdmin
@AdminName VARCHAR(50),
@AdminPhone VARCHAR(20),
@BranchName VARCHAR(20)
AS
BEGIN
INSERT INTO Admin (Admin_Name, Admin_Phone, Branch_No)
SELECT @AdminName, @AdminPhone, (Select Branch_No from Branch where Branch_Name = @BranchName)
END
请尝试一下并给我反馈,我现在不能运行SQL Server,所以我不能确定我是不是在哪里搞错了!
https://stackoverflow.com/questions/51636808
复制