-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 に答える