-1

Как написать запрос вставки для хранимой процедуры.Как написать запрос вставки для хранимой процедуры

У меня есть 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

+4

Ну, *** какой ошибки *** именно вы получаете? Мы не можем читать ваш экран и ваш разум - вам нужно будет СКАЧАТЬ США! ** –

+0

Msg 156, Level 15, State 1, Procedure insert_Orders_sp, Строка 4 Неверный синтаксис рядом с ключевым словом «begin». Msg 137, уровень 15, состояние 2, процедура insert_Orders_sp, строка 6 Должен объявить скалярную переменную «@Uname». –

+0

У вас есть еще кое-что на экране, кроме того, что вы показываете. В сценарии, который вы опубликовали, нет «BEGIN». –

ответ

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 будет первым заявлением в партии. (Есть обходные пути, но они немного сложнее.)

0

вам не хватает тип данных для 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) 

Добавленное STMT, что вы работаете отдельно всегда будет работать, потому что она не использует Переменная. Таким образом, SP и ins stmt не сопоставимы.

0

Как уже упоминалось @objectNotFound, вы пропустили тип данных при объявлении параметра SP.

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) 
Смежные вопросы