Sql server 2008 如何编写存储过程的插入查询

Sql server 2008 如何编写存储过程的插入查询,sql-server-2008,stored-procedures,foreign-key-relationship,Sql Server 2008,Stored Procedures,Foreign Key Relationship,如何为存储过程编写插入查询 我有两张表和用户订单 当我执行这个查询时,它运行得非常好 例如:- 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) val

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

我有两张表和用户订单

当我执行这个查询时,它运行得非常好

例如:-

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)
我不明白我在哪里犯的错误

请帮帮我这应该行得通:

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中包装过程创建脚本。。开始END语句,因为要求create过程是批处理中的第一条语句。有一些变通方法,但它们有点复杂。

您缺少SP参数的数据类型

create proc insert_Orders_sp
    @Uname varchar(10) -- Missing Datatype
as
    insert into Orders(Uid, Quantity)
    values((select Users.Uid from Users where Users.Uname = @Uname), 15)

单独运行的insert stmt将始终有效,因为它不使用变量。因此SP和ins stmt是不可比较的。

正如@objectNotFound提到的,在存储过程中声明SP的参数时丢失了数据类型。

如果声明参数,则必须声明其数据类型,就像您忘记声明数据类型一样:-

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)

那么,你到底犯了什么错误?我们看不懂你的屏幕,也看不懂你的心思——你必须告诉我们!Msg 156,15级,状态1,过程插入\u命令\u sp,第4行关键字“开始”附近语法不正确。Msg 137,级别15,状态2,过程插入\u Orders\u sp,第6行必须声明标量变量@Uname。除显示内容外,屏幕上还有其他内容。您发布的脚本中没有BEGIN。我要转换:insert into Orders VALUES SELECT Users.Uid from Users where.Uname='asim',15到存储过程中,在存储过程中我要通过选择用户名获取用户id。&我不知道怎么做。一般来说,它工作正常,但当我试图将其转换为存储过程时,它不工作。