Sql 如何在admin表中添加管理员姓名和电话,同时使用存储过程从branch表中向admin表中添加branch_名称?
我有两张桌子Sql 如何在admin表中添加管理员姓名和电话,同时使用存储过程从branch表中向admin表中添加branch_名称?,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有两张桌子 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表中选择branch_名称,将他分配到一个特定的分支中 为
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表中选择branch_名称,将他分配到一个特定的分支中
为了让它更清楚,如果我想注册一个新的管理员,这是我想做的
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
我想在注册新管理员时选择一个分支名称='Richlands'后,得到上面的最终结果。我想通过SQLServer存储过程实现这个结果
到目前为止,我所做的就是:
首先,我创建了分支表并插入了值
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')
然后我创建了管理表
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.
我几乎可以肯定,在我创建的存储过程中,我的逻辑语法有一个错误。
如果存储过程逻辑语法是固定的,这将对我非常有帮助 您不需要插入管理员号码,因为您已将其设置为identity,如果我站在您的立场,穿着您的衣服,在您的计算机上工作,我会这样做:
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,所以我不能确定我是否在某个地方犯了错误 您不需要插入管理员号码,因为您已将其设置为identity,如果我站在您的立场,穿着您的衣服,在您的计算机上工作,我会这样做:
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,所以我不能确定我是否在某个地方犯了错误 我认为SET@AdminNo=SCOPE\u IDENTITY不会包含任何内容,因为它前面没有插入项。似乎有些不对劲。哎哟。。。旧的联接语法。您可能会从学习新语法中受益—它已经有20年历史了—我认为SET@AdminNo=SCOPE\u IDENTITY不会包含任何内容,因为它前面没有插入项。似乎有些不对劲。哎哟。。。旧的联接语法。如果我站在你的立场上,穿着你的衣服,在你的电脑上工作@Zack我是个鬼,那我就是这么做的,你可能会从学习新语法中受益XD@Tonner马恩。。。我测试了你的代码,它成功地工作了。。。在使用输入参数执行过程之后,我得到了我想要的结果。。。真的很感激:@beginIT我真的很高兴我能帮上忙^如果我站在你的立场,穿着你的衣服,在你的电脑上工作@Zack我是个鬼,我就是这么做的XD@Tonner马恩。。。我测试了你的代码,它成功地工作了。。。在使用输入参数执行过程之后,我得到了我想要的结果。。。非常感谢:@beginIT我真的很高兴能帮上忙^__^