2016-04-10 5 views
0

SQL Serverストアドプロシージャで変数を使用していますが、問題があります。SQL Serverストアドプロシージャで変数を使用する

私はテーブルにデータを挿入したいが、挿入する前に、それが既に存在するかどうかをチェックしたい。そして、その行だけを更新する。

クエリでは正常に動作しますが、ストアドプロシージャでは正常に動作しません。

私のクエリは@PeopleIDは常にNULLで、ストアドプロシージャは、テーブルに行を挿入し、私はあなたがどうなる記述は何のコード

+0

コードにはどのような問題がありますか? –

+0

は、常に@ peopleID = NULLを設定し、常に人を挿入する – mpourbafrani

+0

私は が必要です。私のテーブルに@Codeがある場合は、行を更新してください。 – mpourbafrani

答えて

0

を持っている「場合は、」最初に

create proc AddPeople 
    @Code nvarchar(50), 
    @Name nvarchar(50) 
as 
begin 
    declare @PeopleID bigint 

    select @PeopleID = id 
    from tbl_People 
    where code = @Code 

    if @PeopleID is Null 
    begin 
     INSERT INTO tbl_People(Code, Name) 
     VALUES(@Code, @Name) 

     SELECT @PeopleID = @@IDENTITY 
    end 
    else 
    begin 
     UPDATE tbl_People 
     SET Name = @name 
     WHERE id = @PeopleID 
    end 

    select @PeopleID as id 
end 

ですidにはデフォルト値がありませんでした。通常、このようなidnot null identity()と宣言されます。あなたのテーブルでこれは本当ですか?

注:idに一致する必要はありません。あなたは行うことができます。

if (exists (select 1 from tbl_People where code = @Code)) 

を条件付きロジックとのために:

update tbl_People set Name = @Name where code = @Code; 

Codeがテーブルの上にユニークなので、おそらくid列が必要すらないことが表示されます。

+0

私はこのテーブルに170000行あり、IDは別のテーブル – mpourbafrani

+0

であり、コード列のタイプはnvarcharなので、この条件で時間をかけて検索し、CPUを使用します。 – mpourbafrani

+0

@mpourbafrani。 。 。あなたの懸念がパフォーマンスの場合は、適切なインデックスが必要です。 –

関連する問題