ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » MS SQL Server » SQL 多条件的组合查询

标题: SQL 多条件的组合查询
离线 konhon
初级会员



精华贴数 0
个人空间 0
技术积分 66 (22846)
社区积分 0 (114419)
注册日期 2004-4-28
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-9-4 09:54 
SQL 多条件的组合查询

@PCurYear
@PCurMonth
@PEmployeeID
@PWorkTypeID
...

SQL语句:

      SELECT EmployeeID, EmployeeName  FROM V_EmpSalary
      WHERE (CurYear = @PCurYear) AND (CurMonth = @PCurMonth)
          AND (@PEmployeeID= '' OR EmployeeID = @PEmployeeID)
          AND (@PWorkTypeID = '' OR WorkTypeID IN (@PWorkTypeID))


我的问题是@PWorkTypeID这个参数该如何赋值, 单个值就可以, 如: @PWorkTypeID = '01'
多个值就不行, @PWorkTypeID = '01,02,03' 这样查不到数据.


只看该作者    顶部
离线 yingchong
初级会员



精华贴数 0
个人空间 0
技术积分 88 (18559)
社区积分 0 (344747)
注册日期 2005-4-11
论坛徽章:0
      
      

发表于 2008-9-4 10:01 
看的不是很懂,为什么不用in


只看该作者    顶部
离线 konhon
初级会员



精华贴数 0
个人空间 0
技术积分 66 (22846)
社区积分 0 (114419)
注册日期 2004-4-28
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-9-4 10:03 


QUOTE:
原帖由 yingchong 于 2008-9-4 10:01 发表
看的不是很懂,为什么不用in

AND (@PWorkTypeID = '' OR WorkTypeID IN (@PWorkTypeID))

已经用in了, 但是作为参数查询的.
关键是这个参数怎么赋值.


只看该作者    顶部
离线 zzaf2008



精华贴数 0
个人空间 0
技术积分 57 (25538)
社区积分 0 (1770467)
注册日期 2008-4-29
论坛徽章:0
      
      

发表于 2008-9-4 10:10 
语法错误 WorkTypeID IN (@PWorkTypeID)
@PWorkTypeID 应该是一个数据集,而不是一个字符串


只看该作者    顶部
离线 yingchong
初级会员



精华贴数 0
个人空间 0
技术积分 88 (18559)
社区积分 0 (344747)
注册日期 2005-4-11
论坛徽章:0
      
      

发表于 2008-9-4 10:17 
可以做SQL语句,试试这个办法
Declare @Sql varchar(1000)
set @sql='SELECT EmployeeID, EmployeeName  FROM V_EmpSalary WHERE '
Set @sql=@sql+'WorkTypeID IN ('+@PWorkTypeID+')'

exec (@sql)

[ 本帖最后由 yingchong 于 2008-9-4 10:18 编辑 ]


只看该作者    顶部
离线 沙漠孤鹰
初级会员


精华贴数 0
个人空间 0
技术积分 175 (10730)
社区积分 14 (9281)
注册日期 2006-4-18
论坛徽章:0
      
      

发表于 2008-9-4 10:23 
按照@PWorkTypeID = '01,02,03'复制,SQL语句是 WorkTypeID IN ('01,02,03')
估计 WorkTypeID IN ('01', '02', '03')才对吧 。

单引号的问题处理好,应该就可以了。

要不就用动态SQL吧。


只看该作者    顶部
离线 konhon
初级会员



精华贴数 0
个人空间 0
技术积分 66 (22846)
社区积分 0 (114419)
注册日期 2004-4-28
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-9-4 10:42 
现在已经是采用动态SQL了.
动态SQL有一个坏处就是SQL语句不能重用, 因这个查询比较多人用, 才优化的.


按照@PWorkTypeID = '01,02,03'复制,SQL语句是 WorkTypeID IN ('01,02,03')
估计 WorkTypeID IN ('01', '02', '03')才对吧 。

我试过很多种形式了, 不行才发贴请教的.


只看该作者    顶部
离线 konhon
初级会员



精华贴数 0
个人空间 0
技术积分 66 (22846)
社区积分 0 (114419)
注册日期 2004-4-28
论坛徽章:1
ITPUB新首页上线纪念徽章     
      

发表于 2008-9-4 10:52 
这里我利用pubs库做了一个简单的例子, 大家可以看看结果.

USE pubs

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE DBO.QueryTest
(
      @PState NVARCHAR(6)
)
AS
      SELECT * FROM publishers WHERE State IN (@PState)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


USE pubs
-- 这里只显示State = 'CA'的记录
EXEC QueryTest 'CA'
-- 这里只显示State = 'MA'的记录
EXEC QueryTest 'MA'
-- 同时显示'CA'和'MA', 没有结果显示出来, 不知道该如何赋参数值
EXEC QueryTest '''CA'', ''MA'''

-- 请不要说用State = 'CA' OR State = 'MA'

[ 本帖最后由 konhon 于 2008-9-4 11:00 编辑 ]


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问