SQL Server:INNER JOIN与WHERE子句不起作用

时间:2014-06-16 18:25:03

标签: vb.net stored-procedures inner-join sql-server-2014-express

期望来自以下查询的输出;

ALTER PROCEDURE [dbo].[ASASearchMed]
(
    @Endorsed Varchar(200),
    @Authorized Varchar(200),
    @Notes Varchar(200),
    @LastName Varchar(50),
    @FirstName Varchar(50),
    @MiddleName Varchar(50)
)
AS
  SELECT 
     ASA.ASAID
     , ASA.ProID
     , PRO.LastName
     , PRO.FirstName
     , PRO.MiddleName
     , ASA.ASAType
     , ASA.Endorsed
     , ASA.Authorized
     , ASA.Notes
     , ASA.DateReg
     , ASA.DateMod
     , ASA.UserReg
     , ASA.UserMod
  FROM
     dbo.ASA
  INNER JOIN 
     dbo.PRO ON ASA.ProID = PRO.ProID
  WHERE
     ASA.ASAType = 'Medical'
     AND NULLIF(ASA.MedGLCtrlNo, '') IS NULL OR ASA.MedGLCtrlNo = '' 
     AND (ASA.Endorsed LIKE '%' + @Endorsed + '%' OR
          ASA.Authorized LIKE '%' + @Authorized + '%' OR
          ASA.Notes LIKE '%' + @Notes + '%' OR
          PRO.LastName LIKE '%' + @LastName + '%' OR
          PRO.FirstName LIKE '%' + @FirstName + '%' OR
          PRO.MiddleName LIKE '%' + @MiddleName + '%')

当我尝试运行它时,我什么都没有,因为它看起来甚至没有执行但是当我在Management Studio中尝试查询时问题仍然存在。

我正在尝试使用仅标记为MedicalNULL''为空字符串的记录来过滤搜索,并且还应匹配下面每个字段中给出的数据。

我的搜索代码

 Public Sub Search()
        Dim StrSQL As String = "ASASearchMed"
        cLib = New clsLibrary
        cLib.openConnection(strConnection)
        If Not cLib.isConnectionOpen() Then
            Exit Sub
        End If
        cLib.initializeCommand(StrSQL)
        cLib.addParameter("@Endorsed", SqlDbType.VarChar, txtSearch.TextLength, txtSearch.Text)
        cLib.addParameter("@Authorized", SqlDbType.VarChar, txtSearch.TextLength, txtSearch.Text)
        cLib.addParameter("@Notes", SqlDbType.VarChar, txtSearch.TextLength, txtSearch.Text)
        cLib.addParameter("@LastName", SqlDbType.VarChar, txtSearch.TextLength, txtSearch.Text)
        cLib.addParameter("@FirstName", SqlDbType.VarChar, txtSearch.TextLength, txtSearch.Text)
        cLib.addParameter("@MiddleName", SqlDbType.VarChar, txtSearch.TextLength, txtSearch.Text)
        objCommand.ExecuteNonQuery()
        lview.Items.Clear()
        DisplayData()
    End Sub

以及如何在listview上显示输出

    Public Sub DisplayData()
        Dim objDataReader = objCommand.ExecuteReader
        While objDataReader.Read
            Dim listview As New ListViewItem
            With listview
                .Text = objDataReader.Item("ASAID")
                .SubItems.Add(objDataReader("ProID"))
                .SubItems.Add(objDataReader("LastName"))
                .SubItems.Add(objDataReader("FirstName"))
                .SubItems.Add(objDataReader("MiddleName"))
                .SubItems.Add(objDataReader("ASAType"))
                .SubItems.Add(objDataReader("Endorsed"))
                .SubItems.Add(objDataReader("Authorized"))
                .SubItems.Add(objDataReader("Notes"))
                .SubItems.Add(objDataReader("DateReg"))
                .SubItems.Add(objDataReader("DateMod"))
                .SubItems.Add(objDataReader("UserReg"))
                .SubItems.Add(objDataReader("UserMod"))
            End With
            lview.Items.Add(listview)
        End While
    End Sub

    Public Sub LoadData()
        Dim StrSQL As String = "ASAViewMed"
        cLib = New clsLibrary
        cLib.openConnection(strConnection)
        If Not cLib.isConnectionOpen() Then
            Exit Sub
        End If
        cLib.initializeCommand(StrSQL)
        objCommand.ExecuteNonQuery()
        lview.Items.Clear()
        DisplayData()
    End Sub

希望有人可以帮助或启发我。提前谢谢!

1 个答案:

答案 0 :(得分:1)

尝试

   AND (ASA.MedGLCtrlNo IS NULL OR ASA.MedGLCtrlNo = '' )

在此示例和整个WHERE子句中也检查()分组。