1

新しい従業員を作成するときに呼び出される次のストアド プロシージャを作成しました。従業員が Employee テーブルにまだ存在しない限り、挿入は成功するはずです。

これを確認するために、FirstName、LastName、および DateOfBirth を確認することにしました。行にこれらすべての列の 3 通りの一致が含まれている場合、挿入は失敗するはずです。

私が見ているのは、If ステートメントが AND を OR として扱っていることです。1 つの一致が発生した場合、挿入は失敗します。

いくつか検索した後、If 構造の何が問題なのかがわかりません。どんな助けでも大歓迎です。

            Create Procedure CreateEmployee
            (
            @Role_ID Int,
            @FirstName Varchar(50),
            @LastName Varchar(50),
            @DateOfBirth Varchar(50),
            @Active Bit
            )
            As
            Begin

            If Not Exists (Select FirstName From Employee Where FirstName = @FirstName)
                AND Not Exists (Select LastName From Employee Where LastName = @LastName)
                AND Not Exists (Select DateOfBirth From Employee Where DateOfBirth = @DateOfBirth)

                Begin
                Insert Into Employee (Role_ID, FirstName, LastName, DateOfBirth, Active)
                Values (@Role_ID, @FirstName, @LastName, @DateOfBirth, @Active)
                End

            Else
                Begin
                Select 'User already exists!'
                End

            End
4

2 に答える 2

6

チェックのために1つのクエリを実行しないのはなぜですか?

If Not Exists (Select 1 From Employee 
               Where FirstName = @FirstName 
                     and LastName = @LastName 
                     and DateOfBirth = @DateOfBirth)
    begin
        ...
于 2013-02-11T09:42:33.000 に答える
0

これは別の方法です@@rowcountSQLサーバーの場合):を使用しWhere not existsます。同様のSQLフィドルデモ

Insert Into Employee (Role_ID, FirstName, LastName, DateOfBirth, Active)
Select @Role_ID, @FirstName, @LastName, @DateOfBirth, @Active
Where not exists (
  select 1 from Employee where FirstName = @FirstName 
                         and LastName = @LastName 
                         and DateOfBirth = @DateOfBirth
)

If @@rowcount=0 select 'User already exists!'
于 2013-02-11T10:15:52.327 に答える