-1

Wie schreibe ich einfügen Abfrage für gespeicherte Prozedur.Wie schreibe ich einfügen Abfrage für gespeicherte Prozedur

Ich habe 2 Tabellen user und orders.

Wenn ich diese Abfrage ausführen läuft es perfekt.

zB: -

insert into Orders 
values((select Users.Uid from Users where Users.Uname = 'asim'), 15) 

aber wenn ich versuche, diese in gespeicherte Prozedur konvertiere ich eine Störung erhalte.

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

Ich konnte nicht verstehen, wo ich den Fehler gemacht habe.

Bitte helfen Sie mir .. orders table

+4

Nun, *** welcher Fehler *** genau erhalten Sie? Wir können weder Ihren Bildschirm noch Ihren Verstand lesen - Sie müssen uns sagen! ** –

+0

Nachricht 156, Ebene 15, Status 1, Prozedur insert_Orders_sp, Zeile 4 Falsche Syntax in der Nähe des Schlüsselwortes 'begin'. Nachricht 137, Ebene 15, Status 2, Prozedur insert_Orders_sp, Zeile 6 Muss die Skalarvariable "@Uname" deklarieren. –

+0

Sie haben andere Dinge auf Ihrem Bildschirm neben dem, was Sie zeigen. Es gibt kein "BEGIN" in dem Skript, das Sie gepostet haben. –

Antwort

0

Dies sollte funktionieren:

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) 

Aber Sie sagen, Sie Syntaxfehler sind immer. Versuchen Sie, dies als Teil eines Skripts zu schreiben, das auch andere Dinge tut? Eine create proc-Anweisung muss die erste Anweisung in einem Batch sein.

Um es die erste Anweisung in einem Batch zu machen, aber tun auch andere Dinge, können Sie dies tun:

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 

Sie können kein Verfahren Erstellungsskript in einer IF .. BEGIN .. END Aussage wegen der Forderung, dass wickeln Die create procedure ist die erste Anweisung im Stapel. (Es gibt Workarounds, aber sie sind ein wenig komplexer.)

0

Sie den Datentyp für die SP Parameter fehlen

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) 

Ihr Einsatz stmt, die Sie separat ausgeführt wird immer funktionieren, weil es nicht verwenden eine Variable. Also sind der SP und der Instinct nicht vergleichbar.

0

Wie von @objectNotFound erwähnt, haben Sie beim Deklarieren von SP-Parametern den Datentyp verpasst.

0

In gespeicherten Prozedur, wenn Sie Parameter deklarieren dann seine obligatorische wie in Ihrem Fall seinen Datentyp zu erklären, vergessen Sie Datentyp zu erklären: -

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)