前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我的旁门左道

我的旁门左道

原创
作者头像
谭广健
修改2020-01-08 18:46:10
3780
修改2020-01-08 18:46:10
举报
文章被收录于专栏:谭广健的专栏谭广健的专栏

旁门左道,汉语成语,拼音是páng mén zuǒ dào,原指不正派的宗教派别,借指不正派的学术派别,现泛指不正派的东西。

其实技术是无分什么旁门左道的,能用最快最安全的办法解决问题,那才是王道。以下我就举个例子吧。

之前帮客户写个一个MVC的管理系统,当时只是考虑到多账套的需求,无考虑到根据账套的状态(只能、可写)。后来客户提出这个需求,因为系统已经上线多时,代码迭代又担心出现问题;于是只好另劈途径。好在,当时多账套是使用ajax调用存储过程的返回值。因此修改存储过程及前端的数据读取和进行相应的业务逻辑就能处理。好吧~再来点干货。

上储存过程的代码:

代码语言:javascript
复制
declare @DBname nvarchar(500) --数据库名
declare @ztname nvarchar(500) --账套名
declare @readonly nvarchar(3) --状态
declare @sql varchar(8000)--SQL语句
declare @sql_tmp varchar(8000)--SQL语句
declare @count_s nvarchar(4000)--返回值

declare @n int
set @n=1
select @sql='select ztname as a0,DBname as name,ztname as a1,ztname as a2,ztname as a3,ztname as a4,ztname as a5,ztname as a6  from K_DBlist where 1=2'
select @sql_tmp='select ztname as a0,DBname as name,ztname as a1,ztname as a2,ztname as a3,ztname as a4,ztname as a5,ztname as a6  from K_DBlist where 1=2'
begin 
 DECLARE mycursor cursor FOR select DBname,ztname,readonly  from K_DBlist where ishide=0
OPEN mycurso
fetch next from mycursor into @DBname,@ztname,@readonly
while @@fetch_status<>-1
 begin
    select @sql=@sql+' UNION ALL '+'select '''+@ztname+''' as a0,'''+@DBname+''' as name,kc.ctypeid,kc.ccode,kc.cname,kc.pricepass,b.pass,b.roleid from ['+@DBname+'].dbo.K_Customer kc left join ['+@DBname+'].dbo.K_Customerpass  b on b.ctypeid=kc.ctypeid where (kc.ccode='''+@user+''' or kc.cname='''+@user+''') and b.pass='''+@pass+''''
    select @sql_tmp=@sql_tmp+' UNION ALL '+'select '''+@ztname+''' as a0,'''+@DBname+'$'+@readonly+''' as name,kc.ctypeid,kc.ccode,kc.cname,kc.pricepass,b.pass,b.roleid from ['+@DBname+'].dbo.K_Customer kc left join ['+@DBname+'].dbo.K_Customerpass  b on b.ctypeid=kc.ctypeid where (kc.ccode='''+@user+''' or kc.cname='''+@user+''') and b.pass='''+@pass+''''   

    fetch next from mycursor into @DBname,@ztname,@readonly
 end
 Close mycurso
 deallocate mycursor 
end 
set @count_s=N'select @count=count(*) from ('+@sql+') as aa';
EXEC sp_executesql @count_s, N'@count int output',@n output;

if @n > 1
    begin        
     exec(@sql_tmp)
    end
else
    begin    
        exec(@sql)
    end

这个代码是根据获取的数据记录总数,判断是多账套还是单账套,然后引用不同的SQL返回集。

如果前端获得返回集再根据数据进行判断。

说这么多只想表达,白猫黑猫捉到老鼠就是好猫。技能再高,解决问题为基本。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档