如何为存储过程编写插入查询

时间:2016-07-25 18:15:15

标签: sql-server-2008 stored-procedures foreign-key-relationship

如何为存储过程编写插入查询。

我有2个表userorders

当我执行此查询时,它运行完美。

例如: -

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

4 个答案:

答案 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)