一个使用exist的例子
公司项目中原来不支持集团分公司,为了解决分公司切换过滤问题,有以下几种实现方法
一、管理员只管理一个分公司
这种情况简单,增加一个分公司字段,where 条件增加一个 fgs=xxx即可
二、管理员能管理多个分公司
1、增加分公司字段
2、使用split与当前登录管理员能管理的分公司进行join
这种方式可以,但是对代码改动太大,所有的sql语句都要增加join,使用exist可以解决这个问题
示例:
string strFilter = "exists(SELECT * from dnt_split(\'"+ ins.ToString()+ "\', ',') where item = xxxid)";
这样可以不动现有代码情况下,实现分公司过滤。dnt_split是一个将字符串转临时表的函数。请参考历史文章。
示例:使用表变量转换字符串为表的方法:
--要转化为表结构的数据 DECLARE @Ins VARCHAR(1000)='1,2,3' --定义表变量存储结果 DECLARE @IdArr table(name varchar(200)) --要执行的动态sql语句 DECLARE @sqlStr VARCHAR(1000) --使用replace将逗号替换 set @sqlStr='select name='''+REPLACE(@Ins,',',''' union all select ''')+'''' --执行并保存到表变量 insert into @IdArr EXEC(@sqlStr) select * from @IdArr
本博客是个人工作中记录,更深层次的问题可以提供有偿技术支持。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。
另外建了几个QQ技术群:
2、全栈技术群:616945527
2、硬件嵌入式开发: 75764412
3、Go语言交流群:9924600
闲置域名WWW.EXAI.CN (超级人工智能)出售。