期望来自以下查询的输出;
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中尝试查询时问题仍然存在。
我正在尝试使用仅标记为Medical
且NULL
或''
为空字符串的记录来过滤搜索,并且还应匹配下面每个字段中给出的数据。
我的搜索代码
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
希望有人可以帮助或启发我。提前谢谢!
答案 0 :(得分:1)
尝试
AND (ASA.MedGLCtrlNo IS NULL OR ASA.MedGLCtrlNo = '' )
在此示例和整个WHERE子句中也检查()分组。