0

個人が会社の従業員であるかどうかを確認するために使用される別のページに、fname、lname、hiredate の 3 つのパラメーターを渡すフォームがあります。

以下のコードは、これら 3 つのパラメーターに基づいて検証を行います。

Dim sqlstr As String = "SELECT fname,lname,hiredate (SELECT COUNT(*) FROM Comp WHERE comp.emp_ID = e.emp_ID) AS [exists], b.* FROM dbo.EMP e LEFT OUTER JOIN comp b ON e.emp_id=b.emp_id WHERE e.fname Like '%" & Request.QueryString("fname") & "%' And e.lname Like '%" & Request.QueryString("lname") & "%' And e.hiredate = '" & Request.QueryString("hiredate") & "'"

チェックにより、この個人が実際に従業員であることが確認された場合、次のコードは、福利厚生を受け取る資格があるかどうかをチェックします。

If myDS.Tables(0).Rows.Count > 0 Then

    Dim listOfBenefits = New List(Of String) ( { _
        "CT07B", "CT081", "CT083", "SG09A", "SG10", "SC11A", "SG23", "SG23A", "SG27" _
    })

    If Not listOfBenefits.Contains(txtBenefits.Text) Then
        blMsg.Text = "This employee is not eligible to receive any of the listed benefits yet."
    End If

End If

これはこれまでのところ非常にうまく機能しています。

現在、特定の従業員が福利厚生に登録されているかどうかを確認する別のチェックを追加しようとしています。

従業員がいずれの福利厚生にも登録していない場合は、資格を確認する必要はありません。

一方、従業員が何らかの福利厚生に登録している場合は、上記の福利厚生のいずれかの資格があるかどうかを確認します。

従業員が福利厚生に登録されているかどうかを判断するためのチェックが無視されているため、これまでのところ私のチェックは機能していません。

私は何を間違っていますか?

特典の登録のチェックを含む更新されたコードを次に示します。

 Dim sqlstr As String = "SELECT fname,lname,hiredate, (SELECT COUNT(*) FROM Comp WHERE comp.emp_ID = e.emp_ID) AS [exists], b.* FROM dbo.EMP e LEFT OUTER JOIN comp b ON e.emp_id=b.emp_id WHERE e.fname Like '%" & Request.QueryString("fname") & "%' And e.lname Like '%" & Request.QueryString("lname") & "%' And e.hiredate = '" & Request.QueryString("hiredate") & "'"

If myDS.Tables(0).Rows.Count > 0 Then

    ' Ok, this individual is an employee, let's check to see if s/he has registered for any benefits.
    benefitSQL = "SELECT fname, lname, (SELECT COUNT(*) FROM benefits WHERE benefits.emp_ID = e.emp_ID) AS [exists], b.* FROM dbo.EMP e LEFT OUTER JOIN benefits b ON e.emp_id=b.emp_id "

    If CInt(exists.Value) > 0 Then
        ' Then employee has some benefits. Now, check whether one of those benefits is on the list below. '

        Dim listOfBenefits = New List(Of String) ( { _
            "CT07B", "CT081", "CT083", "SG09A", "SG10", "SC11A", "SG23", "SG23A", "SG27" _
        } )

        If Not listOfBenefits.Contains(txtBenefits.Text) Then
            lblMsg.Text = "This employee is not eligible to receive any of the listed benefits yet."
        End If
    Else

        lblMsg.Text = "This employee has not registered for any benefits yet."   
    End If
 End If

次のようにフォーマットされた SQL。

SELECT
    fname,
    lname,
    hiredate,
    (
        SELECT
            COUNT(*)
        FROM
            Comp
        WHERE
            comp.emp_ID = e.emp_ID
    ) AS [exists],
    b.*
FROM
    dbo.EMP e
    LEFT OUTER JOIN comp b ON e.emp_id = b.emp_id
WHERE
    e.fname LIKE %@fname And e.lname LIKE %@lname%
    AND
    e.hiredate = @hiredate
4

1 に答える 1

0

データを選択していますが、データによって制約したい場合:

SELECT
    e.fname,
    e.lname,
    e.hiredate
FROM
    dbo.EMP e
WHERE
    e.fname LIKE %@fname And e.lname LIKE %@lname%
    AND
    e.hiredate = @hiredate
    AND
    EXISTS (
        SELECT
            1
        FROM
            Comp
        WHERE
            comp.emp_ID = e.emp_ID
    )

テーブルを内部結合することもできます。

SELECT
    e.fname,
    e.lname,
    e.hiredate,
    c.*
FROM
    dbo.EMP e
    INNER JOIN Comp c ON e.emp_ID = c.emp_ID
WHERE
    e.fname LIKE %@fname And e.lname LIKE %@lname%
    AND
    e.hiredate = @hiredate
于 2012-09-28T21:25:15.960 に答える