如何为存储过程编写插入查询。
我有2个表user
和orders
。
当我执行此查询时,它运行完美。
例如: -
insert into Orders
values((select Users.Uid from Users where Users.Uname = 'asim'), 15)
但是当我尝试将其转换为存储过程时,我收到错误。
create proc insert_Orders_sp
@Uname
as
insert into Orders(Uid, Quantity)
values((select Users.Uid from Users where Users.Uname = @Uname), 15)
我无法理解我犯错的地方。
请帮帮我.. orders table
答案 0 :(得分:0)
这应该有效:
create proc insert_Orders_sp
@Uname varchar(20)
as
insert into Orders(Uid, Quantity)
values((select Users.Uid from Users where Users.Uname = @Uname), 15)
但是你说你得到了语法错误。您是否尝试将此作为脚本的一部分来编写其他内容? create proc
语句需要是批处理中的第一个语句。
要使其成为批处理中的第一个语句,还要执行其他操作,您可以执行以下操作:
if exists (select name from sys.objects where name = 'insert_Orders_sp')
begin
drop proc insert_Orders_sp
end
go -- Separates the batch
create proc insert_Orders_sp
@Uname varchar(20)
as
insert into Orders(Uid, Quantity)
values((select Users.Uid from Users where Users.Uname = @Uname), 15)
go
由于要求IF .. BEGIN .. END
成为批处理中的第一个语句,因此无法在create procedure
语句中包装过程创建脚本。 (有一些解决方法,但它们有点复杂。)
答案 1 :(得分:0)
您缺少SP参数的数据类型
{{1}}
您单独运行的insert stmt将始终有效,因为它不使用变量。所以SP和ins stmt没有可比性。
答案 2 :(得分:0)
如@objectNotFound所述,您在声明SP的参数时错过了数据类型。
答案 3 :(得分:0)
在存储过程中,如果声明参数,则必须声明其数据类型,就像您忘记声明数据类型一样: -
CREATE proc insert_Orders_sp @Uname varchar(10) -- Missing Datatype here in brackets 10 is size of datatype
AS INSERT INTO Orders(UID, Quantity) VALUES(
(SELECT Users.Uid
FROM Users
WHERE Users.Uname = @Uname), 15)