SQL怎么根据部分条件查询满足条件的所有数据
SQL如何根据部分条件查询满足条件的所有数据
"select * from equipment where ID= '" + TextBox22.Text + "' and xuhao='"+TextBox1.Text+"' and。。。。。。";
假如表中有ID,xuhao,place,time,company等列,那我要根据任意列查询符合条件的信息,SQL语句该怎么写
------解决思路----------------------
用动态SQL实现,
逐个框判断是否有写,如有则tsql=tsql+" and [字段]='" + TextBox.Text + "' '
------解决思路----------------------
如果你确定那是NULL
那么还可以解决的
select * from equipment where ID= ISNULL('" + TextBox22.Text + "',ID) and xuhao=ISNULL('"+TextBox1.Text+"',xuhao) and
或者是用CASE判断为空再处理
但是,这样虽然方便却不符合查询规范
你还是拼接查询条件吧,不需要那个条件,那个就不带入查询,那样才效率
------解决思路----------------------
给你贴个我的业务,看看
------解决思路----------------------
你是客户端拼的sql,有选择地拼条件啊。
"select * from equipment where ID= '" + TextBox22.Text + "' and xuhao='"+TextBox1.Text+"' and。。。。。。";
假如表中有ID,xuhao,place,time,company等列,那我要根据任意列查询符合条件的信息,SQL语句该怎么写
------解决思路----------------------
用动态SQL实现,
逐个框判断是否有写,如有则tsql=tsql+" and [字段]='" + TextBox.Text + "' '
------解决思路----------------------
如果你确定那是NULL
那么还可以解决的
select * from equipment where ID= ISNULL('" + TextBox22.Text + "',ID) and xuhao=ISNULL('"+TextBox1.Text+"',xuhao) and
或者是用CASE判断为空再处理
但是,这样虽然方便却不符合查询规范
你还是拼接查询条件吧,不需要那个条件,那个就不带入查询,那样才效率
------解决思路----------------------
给你贴个我的业务,看看
--定义动态SQL
Declare @SqlTxt NVarchar(4000),@SqlCon NVarchar(1000)
Set @SqlTxt = N''
Set @SqlCon = N''
--组织动态SQL字符
Set @SqlTxt = N'Insert Into #TmpStyle' + CHAR(13)
+ N'Select Distinct 0,A.SystemID,A.StyleID,A.StyleNo,A.StyleName,A.StandardStyleNo,0,A.StyleTypeID,N'''',N'''',A.CreatedDate,DATEADD(Day,A.CreatedDate,N''2010-01-01''),0 ' + CHAR(13)
+ N' From MainStyle A With(NoLock) ' + CHAR(13)
+ N' Inner Join StyleEdition B With(NoLock) On B.SystemID = A.SystemID ' + CHAR(13)
/***** 处理条件语句生成 *****/
--款号条件处理
If @StyleNo != N''
Begin
If @SqlCon = N'' Set @SqlCon = N' Where ' Else Set @SqlCon = @SqlCon + N' And '
Set @SqlCon = @SqlCon + N' (A.StyleNo Like ''%' + @StyleNo + N'%'')' + CHAR(13)
End
--款名条件处理
If @StyleName != N''
Begin
If @SqlCon = N'' Set @SqlCon = N' Where ' Else Set @SqlCon = @SqlCon + N' And '
Set @SqlCon = @SqlCon + N' (A.StyleName Like ''%' + @StyleName + N'%'')' + CHAR(13)
End
--主款号条件处理
If @StandardStyleNo != N''
Begin
If @SqlCon = N'' Set @SqlCon = N' Where ' Else Set @SqlCon = @SqlCon + N' And '
Set @SqlCon = @SqlCon + N' (A.StandardStyleNo = ''' + @StandardStyleNo + N''')' + CHAR(13)
End
--款式类别条件处理
If @StyleTypeID > 0
Begin
If @SqlCon = N'' Set @SqlCon = N' Where ' Else Set @SqlCon = @SqlCon + N' And '
Set @SqlCon = @SqlCon + N' (A.StyleTypeId = ' + CONVERT(NVarchar,@StyleTypeID) + N')' + CHAR(13)
End
--修改时间处理条件处理
If @MFDate > 0 Or @MTDate > 0
Begin
If @SqlCon = N'' Set @SqlCon = N' Where ' Else Set @SqlCon = @SqlCon + N' And '
Set @SqlCon = @SqlCon + N' (DATEDIFF(DAY,N''2010-01-01'',B.ModifiedDate) Between ' + CONVERT(NVarchar,@MFDate) + N' And ' + CONVERT(NVarchar,@MTDate) + N')' + CHAR(13)
End
--状态条件处理
If @SqlCon = N'' Set @SqlCon = N' Where ' Else Set @SqlCon = @SqlCon + N' And '
Set @SqlCon = @SqlCon + N' (A.State = ' + CONVERT(NVarchar,@State) + N')' + CHAR(13)
Set @SqlTxt = @SqlTxt + @SqlCon
Print @SqlTxt
Exec(@SqlTxt)
------解决思路----------------------
你是客户端拼的sql,有选择地拼条件啊。
Dim sql As String
Dim sqlWhere As String
'输入非空的才拼条件'
sqlWhere = vbNullString
If Len(TextBox22.Text) <> 0 Then
sqlWhere = sqlWhere & " AND ID= '" + TextBox22.Text + "'"
End If
If Len(TextBox1.Text) <> 0 Then
sqlWhere = sqlWhere & " AND xuhao='" + TextBox1.Text + "'"
End If
...
'第一个 AND 替换成 WHERE'
If Len(sqlWhere) <> 0 Then
sqlWhere = " WHERE " & Mid$(sqlWhere, 5)
End If
sql = "select * from equipment " & sqlWhere