旁门左道,汉语成语,拼音是páng mén zuǒ dào,原指不正派的宗教派别,借指不正派的学术派别,现泛指不正派的东西。
其实技术是无分什么旁门左道的,能用最快最安全的办法解决问题,那才是王道。以下我就举个例子吧。
之前帮客户写个一个MVC的管理系统,当时只是考虑到多账套的需求,无考虑到根据账套的状态(只能、可写)。后来客户提出这个需求,因为系统已经上线多时,代码迭代又担心出现问题;于是只好另劈途径。好在,当时多账套是使用ajax调用存储过程的返回值。因此修改存储过程及前端的数据读取和进行相应的业务逻辑就能处理。好吧~再来点干货。
上储存过程的代码:
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 删除。