存储过程里面包含in的问题



create procedure [dbo].[query_all_alarm_history]
@userCode varchar(5),
@startTime datetime,
@endTime datetime,
@alarmIds varchar(50)  ------------------参数类型   'aa,bb,cc,dd'
as
SELECT

  		UsersInfo.User_name + '(' + UsersInfo.User_code + ')' AS userName,
		CONVERT(CHAR(19), UseAlarmHistoryData.Check_time, 20)  AS strCheckTime,
        UseAlarmHistoryData.Alarm_ID AS alarmId,
        (dbo.UsersInfo.User_name + '.' + AlarmIDDef.Alarm_name ) AS alarmName,
        AlarmIDDef.Alarm_ename AS alarmEname,
        UseAlarmHistoryData.Alarm_type AS alarmType, 
        AlarmTypeDef.Alarm_type_desp AS alarmTypeDesp, 
        UseAlarmHistoryData.Alarm_value AS alarmValue, 
        AlarmValueDef.Alarm_value_desp AS alarmValueDesp, 
		UseAlarmHistoryData.Source_value as sourceValue,

        UseAlarmHistoryData.Treat_desp AS treatDesp,
		CASE WHEN UseAlarmHistoryData.Source_value  = 0 THEN
				'未处理'
			ELSE
 				'已处理'
		END AS sourceValueDesc


 FROM
	UseAlarmHistoryData LEFT OUTER JOIN 
	AlarmTypeDef ON	
	UseAlarmHistoryData.Alarm_type = AlarmTypeDef.Alarm_type LEFT OUTER JOIN 
	AlarmValueDef ON 
	UseAlarmHistoryData.Alarm_value = AlarmValueDef.Alarm_value LEFT OUTER JOIN 
	AlarmIDDef ON
	UseAlarmHistoryData.Alarm_ID = AlarmIDDef.Alarm_ID LEFT OUTER JOIN	
	UsersInfo ON UseAlarmHistoryData.User_code = UsersInfo.User_code
 WHERE 
1=1 AND
	 (@userCode='') or (@userCode<>'' and ((UseAlarmHistoryData.User_code=@userCode) ))
	 AND (UseAlarmHistoryData.Check_time >=@startTime) 
     AND (UseAlarmHistoryData.Check_time <=@endTime)
	 AND (UseAlarmHistoryData.Alarm_ID in (SELECT F1 FROM dbo.fun_splitstr(@alarmIds,',')) or @alarmIds = '') 
ORDER BY 
	dbo.UseAlarmHistoryData.Check_time desc




-----------------------------------------------------------------函数
create function [dbo].[fun_splitstr]
(
    @str varchar(200),
    @strSeprate varchar(10)  
)

returns @temp table(F1 varchar(200))   
as
begin  
  declare @i int  
   set @str=rtrim(ltrim(@str))   
   set @i=charindex(@strSeprate,@str)   
   while @i>=1   
   begin  
     insert @temp values(left(@str,@i-1))   
     set @str=substring(@str,@i+1,len(@str)-@i)   
     set @i=charindex(@strSeprate,@str)   
   end  
   if @str<>''  
     insert @temp values(@str)   
   return
end




 


sql传入参数以字符串  如  ‘aa,bb,cc,dd’  形式即可    函数自动转换为  'aa','bb'...

网上还有很多类似拼接字符串的,那种方式过于繁琐,尤其遇到较复杂sql语句的时候,单引号将会是你的噩梦



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值