1

asp.net アプリケーション内にデータベース ファイルを作成しました。サーバーエクスプローラーから、次のようにストアドプロシージャを記述しようとしました

CREATE PROCEDURE insertData
(
@ID int,
@Name varchar(50),
    @Address varchar(50),
@bit BIT OUTPUT
)
as
begin
    declare @oldName as varchar(45)
    declare @oldAddress as varchar(45)

    set @oldName=(select EmployeeName from Employee where EmployeeName=@Name)
    set @oldAddress=(select Address from Employee where Address=@Address)

    if(@oldName <> @Name | @oldAddress <> @Address)
    insert into Employee(EmpID,EmployeeName,Address)values(@ID,@Name,@Address)
    SET @bit = 1
    END

しかし、これを保存するとエラーが発生しIncorrect syntax near <ます..

4

3 に答える 3

4

ここにはいくつかの間違いがあります

if(@oldName <> @Name | @oldAddress <> @Address)

うまくいきません - 試してみてください

if @oldName <> @Name OR @oldAddress <> @Address

もちろん、上記の 2 つのクエリ (両方の変数を割り当てる 1 つのクエリである可能性があり、そうあるべきでした) が変数が常に等しいことを確認する方法のため、これは決して真ではありません。

すなわち:

set @oldName=(select EmployeeName from Employee where EmployeeName=@Name)

@oldNameに等しくない場合、何がありえます@Nameか? NULL(わかりました、それは可能性がありますが、チェックしている<>場合は使用する演算子が間違っています)NULL

あなたがここに書きたかったのは、次のことだと思います。

select @oldName=EmployeeName,@oldAddress = Address from Employee where EmpID = @ID
于 2012-12-28T11:20:11.230 に答える
1

使用すべきであり、使用ORしないでください|

各値を個別にクエリしてチェックする代わりにこれを行うこともできnameますaddressempid

IF NOT EXISTS (
select * from Employee 
where EmpID = @ID AND EmployeeName = @Name AND Address = @Address)
  insert into Employee(EmpID,EmployeeName,Address)values(@ID,@Name,@Address)
  SET @bit = 1
END
于 2012-12-28T11:27:49.487 に答える
0

"<>" の代わりに != を使用でき、"|" の代わりに Or を使用できます。

于 2012-12-28T11:19:53.397 に答える