2012-05-16 69 views
-2

有在執行該代碼時發生的錯誤的數目:在@emp噸-SQL代碼:在@emp語法錯誤 - 必須聲明標量變量@Handle

正確語法 - 線11

必須聲明標量變量@Handle - 線19
必須聲明標量變量@Handle - 線32


/*Delete the selected list */ 
use database 

/* create procedure with in scehema */ 
Create procedure schema.Proc_delete_emp  
       @emp varchar(50) =0 
       @displayname nvarchar(50)=0 
       @userId int =0 
AS 
BEGIN 
    /* Internal variables */ 
    DECLARE @Handle INT 

    @emp =select emp from dbo.emp_list 
    /*definition of emp_list table (userid,emp)*/ 

    /* Insert the list into audit table */ 
    INSERT INTO schema.tbl_audit(@emp, @displayname, @UserID) 
    VALUES('emp', CURRENT_USER, system_user) 

    /* Get Handle */ 
    SELECT @Handle = SCOPE_IDENTITY() -- get handle 

    Select handle 
    From schema.tbl_emp_list 
    Where delete_handle = 0 and card_type = 'n' --/** Normal**/ 

    /* delete the inserted list from the original table */ 
    Delete from dbo.emp_list 
    Where pan in (select card_ID from schema.tbl_emp_list) 

    /* Update table inside the schema */ 
    Update schema.tbl_emp_list 
    Set delete_handle = @handle 
    Where delete_handle=0 and card_type ='n'; 
end 
+3

存儲過程的參數有什麼問題/問題/挑戰? ?!? –

+1

爲什麼你提供參數給SP?你不要在任何地方使用它們。 –

回答

3

第一個錯誤是很明顯 - 這行是無效的:

@emp =select emp from dbo.emp_list 

您需要改用此:

SELECT @emp = emp FROM dbo.emp_list 

另外:因爲你並將結果存儲到一個變量,你需要確保這SELECT聲明永遠只能返回最多1行 - 否則,你會得到更多的錯誤....

其他人都有點不清楚 - 你發佈真的腳本及其所有內容?我幾乎想你可能有一些有陳述GO在某些點上,你會不顯示 - 這可以解釋的錯誤#2,#3

而且也:我相信你需要有獨立的你的程序的參數逗號 - 我很驚訝,也不會導致錯誤...再加上:如果你定義了VARCHAR(50)NVARCHAR(50)類型的參數 - 你不能將它們初始化爲值0(這是一個INT) - 你需要使用一個有意義的一個字符串值 - 像''(空字符串)

使用此:

CREATE PROCEDURE schema.Proc_delete_emp  
      @emp varchar(50) = '', 
      @displayname nvarchar(50) = '', 
      @userId INT = 0 

此外,在這裏這INSERT說法是完全錯誤的,太....

INSERT INTO schema.tbl_audit(@emp, @displayname, @UserID) 
VALUES('emp', CURRENT_USER, system_user) 

INSERT語句需要列出它想與之合作的表和列名 - 但你不能定義你的列名變量 - 他們需要被拼寫出來。因此,將其更改爲類似:

INSERT INTO schema.tbl_audit(emp, displayname, UserID) -- use *your* column names here 
VALUES('emp', CURRENT_USER, system_user) 
+0

非常感謝你,代碼執行 – user1386445

0

加入到什麼marc_s提到

你需要讓你在括號

CREATE PROCEDURE schema.Proc_delete_emp (
      @emp varchar(50) = '', 
      @displayname nvarchar(50) = '', 
      @userId INT = 0 
      )