SQL Serverストアドプロシージャで変数を使用していますが、問題があります。SQL Serverストアドプロシージャで変数を使用する
私はテーブルにデータを挿入したいが、挿入する前に、それが既に存在するかどうかをチェックしたい。そして、その行だけを更新する。
クエリでは正常に動作しますが、ストアドプロシージャでは正常に動作しません。
私のクエリは@PeopleIDは常にNULLで、ストアドプロシージャは、テーブルに行を挿入し、私はあなたがどうなる記述は何のコード
SQL Serverストアドプロシージャで変数を使用していますが、問題があります。SQL Serverストアドプロシージャで変数を使用する
私はテーブルにデータを挿入したいが、挿入する前に、それが既に存在するかどうかをチェックしたい。そして、その行だけを更新する。
クエリでは正常に動作しますが、ストアドプロシージャでは正常に動作しません。
私のクエリは@PeopleIDは常にNULLで、ストアドプロシージャは、テーブルに行を挿入し、私はあなたがどうなる記述は何のコード
を持っている「場合は、」最初に
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
にはデフォルト値がありませんでした。通常、このようなid
はnot null identity()
と宣言されます。あなたのテーブルでこれは本当ですか?
注:id
に一致する必要はありません。あなたは行うことができます。
if (exists (select 1 from tbl_People where code = @Code))
を条件付きロジックとのために:
update tbl_People set Name = @Name where code = @Code;
Code
がテーブルの上にユニークなので、おそらくid
列が必要すらないことが表示されます。
私はこのテーブルに170000行あり、IDは別のテーブル – mpourbafrani
であり、コード列のタイプはnvarcharなので、この条件で時間をかけて検索し、CPUを使用します。 – mpourbafrani
@mpourbafrani。 。 。あなたの懸念がパフォーマンスの場合は、適切なインデックスが必要です。 –
コードにはどのような問題がありますか? –
は、常に@ peopleID = NULLを設定し、常に人を挿入する – mpourbafrani
私は が必要です。私のテーブルに@Codeがある場合は、行を更新してください。 – mpourbafrani