存储过程入参不能带入in的参数传带逗号值(拼接语句)

明天是明天 2018-03-26 11:26:16
if isnull(@st1,'')<>''and ISNULL(@et1,'')<>''
begin
set @sql=@sql + ' and t.生效日期 between @st1 and @et1 '
end
if isnull(@st2,'')<>''and ISNULL(@et2,'')<>''
begin
set @sql=@sql + ' and t.失效日期 between @st2 and @et2 '
end
if ISNULL(@ischeck,'')<>''
begin
set @sql=@sql + ' and [是否审核]=@ischeck '
--set @sql=@sql + ' order by a.FBillNo '
end
if ISNULL(@FBillNo,'')<>''
begin
--set @sql=@sql + ' and t.FBillNo=@FBillNo'
set @sql=@sql + ' and t.FBillNo in ('+ '@FBillNo' + ')'
--set @sql=@sql + ' and t.FBillNo in (select c1 from [dbo].[split](@FBillNo,'')) '
end
print @sql
exec sp_executesql @sql
,N'@FBillNo NVARCHAR(50)
,@st1 date
,@et1 date
,@st2 date
,@et2 date
,@ischeck NVARCHAR(50)'
,@FBillNo
,@st1
,@et1
,@st2
,@et2
,@ischeck

关键语句如上,现在就是@FBillNo 怎么传入带逗号的 多介字符串值

因为是多条件需要判断是否为空,所以是拼接语句,按搜索出来的, 用下面的函数方法,语句中的 最后逗号会报语法错误
set @sql=@sql + ' and t.FBillNo in (select c1 from [dbo].[split](@FBillNo,',')) '

如下的 函数方法,
https://blog.csdn.net/dracotianlong/article/details/51813167
https://blog.csdn.net/f627422467/article/details/52486124
https://bbs.csdn.net/topics/390643642?page=1
https://www.cnblogs.com/chendaoyin/p/3682625.html
https://blog.csdn.net/winnyrain/article/details/52934621
求各位老师指点,谢谢了
...全文
1087 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-03-26
  • 打赏
  • 举报
回复
内部的单引号必须1个变成2个。
set @sql=@sql + ' and t.FBillNo in (select c1 from [dbo].[split](@FBillNo,'','')) '
中国风 2018-03-26
  • 打赏
  • 举报
回复
@FBillNo--参数的格式是否如下: e.g.
 DECLARE @FBillNo VARCHAR(123)='1,2',@sql NVARCHAR(max)=''
 SET @FBillNo=''''+REPLACE(@FBillNo,',',''',''')+''''
 SET @sql=@sql + ' and t.FBillNo in ('+ @FBillNo + ')'
 PRINT @sql
--生成格式
 /*
  and t.FBillNo in ('1','2')

*/
明天是明天 2018-03-26
  • 打赏
  • 举报
回复
引用 1 楼 yenange 的回复:
内部的单引号必须1个变成2个。
set @sql=@sql + ' and t.FBillNo in (select c1 from [dbo].[split](@FBillNo,'','')) '
谢谢亲爱的版主,我老是忘记这语法了,非常感谢

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧