-3

执行此代码时发生了许多错误:

@emp 的语法不正确 - 第 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
4

2 回答 2

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) 
于 2012-05-16T05:31:09.193 回答
0

添加到 marc_s 提到的内容

您需要将存储过程参数放在括号中

CREATE PROCEDURE schema.Proc_delete_emp   (
             @emp varchar(50) = '',
             @displayname nvarchar(50) = '',
             @userId INT = 0
             )
于 2012-05-16T07:10:34.710 回答