-1

如何編寫存儲過程的插入查詢。如何編寫存儲過程的插入查詢

我有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

Msg 156,Level 15,State 1,Procedure insert_Orders_sp,Line 4 關鍵字'begin'附近的語法不正確。 消息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) 

你單獨運行永遠是可行的,因爲它不使用你的插入語句一個變量。所以SP和INS STT沒有可比性。

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)