大家会写这么长的SQL语句么???

时间:2021-07-20 19:41:24
不说语句质量及难易度。。

我想知道大家遇到这钟情况一般怎么处理???

是分到不同包含查询语句的函数里面还是像我这样一条语句写出来???

这条语句查询出来的都是一个页面上的所以“页签”所包含的内容,最后拼接如下:

SELECT WF_w_pc.XXXX,w_pc_ProjectId,ISNULL(WF_w_pc.w_pc_AnnualPlan,'') w_pc_AnnualPlan,w_pc_ProjectName,Dept_Name,ISNULL(WF_R_BI.YYYYName,'') w_pc_Nature,ISNULL(WF_R_BI2.YYYYName,'') w_pc_SOURCE ,w_pc_StartDate,w_pc_EndDate,ISNULL(WF_w_pc_AP.w_pc_AP_Plan,'') w_pc_AP_Plan 
,CASE WF_w_pc.w_pc_Status 
WHEN 10 THEN '草稿' 
WHEN 20 THEN '审核中' 
WHEN 30 THEN '完成' 
ELSE '' END
AS w_pc_Status 
,w_pc_Backdrop,w_pc_MainContent,w_pc_TechLines,w_pc_ResultForm,w_pc_SocialBenefits,w_pc_EconomicBenefit,w_pc_TechBenefits,w_pc_CooperationForm,w_pc_CooperationByUnit 
,ISNULL(WF_w_pc_P.w_pc_P_UserName,'') w_pc_P_UserName
,ISNULL(WF_w_pc_P.proHead,'') proHead 
,ISNULL(WF_w_pc_P.proArticipants,'') proArticipants
FROM WF_Research_ProjectCharter WF_w_pc 
LEFT JOIN WF_Research_PC_AnnualPlan WF_w_pc_AP 
ON WF_w_pc.XXXX=WF_w_pc_AP.XXXX 
LEFT JOIN WF_Research_BasicInfo WF_R_BI
ON WF_w_pc.w_pc_Nature=WF_R_BI.YYYYID AND WF_R_BI.YYYYType=1 
LEFT JOIN WF_Research_BasicInfo WF_R_BI2 
ON WF_w_pc.w_pc_Nature=WF_R_BI2.YYYYID AND WF_R_BI2.YYYYType=2 
LEFT JOIN 
(SELECT XXXX,w_pc_P_UserName=(STUFF((SELECT ',' + w_pc_P_USERNAME FROM WF_Research_PC_Participate 
WHERE w_pc_P_Type=2 AND XXXX=pcp.XXXX FOR XML PATH('')),1,1,'')) 
,proHead=(STUFF((SELECT ',' + w_pc_P_USERNAME FROM WF_Research_PC_Participate 
WHERE w_pc_P_Type=3 AND XXXX=pcp.XXXX FOR XML PATH('')),1,1,'')) 
,proArticipants=(STUFF((SELECT ',' + w_pc_P_USERNAME FROM WF_Research_PC_Participate 
WHERE w_pc_P_Type<>3 AND XXXX=pcp.XXXX FOR XML PATH('')),1,1,'')) 
FROM WF_Research_PC_Participate pcp 
GROUP BY XXXX) AS WF_w_pc_P 
ON WF_w_pc.XXXX=WF_w_pc_P.XXXX 
WHERE WF_w_pc.XXXX=@XXXX

24 个解决方案

#1


其实这个不算长,而且逻辑也不复杂,还好

#2


这也算长。。。。哥有次写linq都比这个长了。

#3


有时会,特别是自动生成语句的时候,有时还很长,还好吧

#4


我个人的意见呀,尽量尽量少在SQL里写逻辑和判断的处理,SQL目的尽量纯粹一些,

它就是为了取数据用的,至于取出来数据做判断,形式成什么,如果空了要显示什么,

这些都是c#来实现的。

我从不在SQL里写ISNULL、CASE之类的逻辑判断。这些交给c#吧,在aspx页面做个判断就可以了嘛。

个人意见,欢迎拍砖。

#5


加一些缩进看起来会好一点。

如果你把所有C#程序全部写在一行中(编译器允许你这么做),也会够呛的。

#6


1.单纯从长度上说,这个就是一小段代码而已;
2.从设计角度说,sql开发尽量采用动态sql方式,
  这样可以把常用的数据对象的查询方法进行封装,
  实际上,充分利用数据库的视图,表,函数和动态sql,也可以产生类似OOPL的效果,大幅度的减少数代码量

#7


随便。。。。。

#8


要看你擅长做什么处理了,如果你对SQL的处理比较熟练,那么建议尽量使用SQL来处理所有逻辑,界面层直接绑定即可。如果你不擅长写SQL语句,逻辑可以调整到外面c#处理……

#9


还好啦,我经常写这么长的

#10


引用 6 楼 microtry 的回复:
1.单纯从长度上说,这个就是一小段代码而已;
2.从设计角度说,sql开发尽量采用动态sql方式,
  这样可以把常用的数据对象的查询方法进行封装,
  实际上,充分利用数据库的视图,表,函数和动态sql,也可以产生类似OOPL的效果,大幅度的减少数代码量


嗯,谢谢啦!!!

#11


引用 楼主 qingYun1029 的回复:
不说语句质量及难易度。。

我想知道大家遇到这钟情况一般怎么处理???

是分到不同包含查询语句的函数里面还是像我这样一条语句写出来???

这条语句查询出来的都是一个页面上的所以“页签”所包含的内容,最后拼接如下:

SQL code1234567891011121314151617181920212223242526272829SELECT WF_w_……


我想说 若是给你个300多行的SQL 而且到处的join ,union,case,聚合函数,这种还得了
大家会写这么长的SQL语句么???

#12


还好,
我最近也在开发这种签字流程的业务系统,
sql语句也是相当的长,

#13


引用 5 楼 caozhy 的回复:
加一些 缩进看起来会好一点。

如果你把所有C#程序全部写在一行中(编译器允许你这么做),也会够呛的。

++1
实在觉得人为加太麻烦就用工具中的 format code=》format (ctrl+F11)

#14


谢谢各位啦。。。。

还以为写的太长呢。。。。。

#15


·要注意注释和规范啊·其实我个人感觉 sql处理起来要比 c#快· 一般能在SQL里面解决的 都在那里解决了·

#16


适当的使用视图或函数吧。还有可以利用 with语法还不错,层次感强一点,思路也会清晰。。

#17


哎,现在这个项目居然整出来了近万行的存储过程了,真无言了

#18


引用 16 楼 zifengshen1981 的回复:
适当的使用视图或函数吧。还有可以利用 with语法还不错,层次感强一点,思路也会清晰。。


+1

#19


基本上不这么写,显示归显示,逻辑归逻辑,数据归数据

我想问一下,你这到底归那里呢?为了显示而把数据按逻辑处理了?

#20


sql 语句到不算长 更长的我都写过

我个人写法 基本上不会用IsNull  case when...  

数据量大的时候 这玩意用多了貌似会影响Sql的执行性能。 
case when 还好 isnull比较有影响 前提是大数据量   

#21


这个还好,见过了,习惯了,本人表示毫无压力 大家会写这么长的SQL语句么???

#22


还好  大家会写这么长的SQL语句么???

#23


个人习惯,查询中的每个字段单独占一行
每个表连接单独占一行
每个条件单独占一行

反正就是尽量看着清楚,不怕长

#24


引用 19 楼 wanghui0380 的回复:
基本上不这么写,显示归显示,逻辑归逻辑,数据归数据

我想问一下,你这到底归那里呢?为了显示而把数据按逻辑处理了?


需要显示的数据查询出来输出。。。

#1


其实这个不算长,而且逻辑也不复杂,还好

#2


这也算长。。。。哥有次写linq都比这个长了。

#3


有时会,特别是自动生成语句的时候,有时还很长,还好吧

#4


我个人的意见呀,尽量尽量少在SQL里写逻辑和判断的处理,SQL目的尽量纯粹一些,

它就是为了取数据用的,至于取出来数据做判断,形式成什么,如果空了要显示什么,

这些都是c#来实现的。

我从不在SQL里写ISNULL、CASE之类的逻辑判断。这些交给c#吧,在aspx页面做个判断就可以了嘛。

个人意见,欢迎拍砖。

#5


加一些缩进看起来会好一点。

如果你把所有C#程序全部写在一行中(编译器允许你这么做),也会够呛的。

#6


1.单纯从长度上说,这个就是一小段代码而已;
2.从设计角度说,sql开发尽量采用动态sql方式,
  这样可以把常用的数据对象的查询方法进行封装,
  实际上,充分利用数据库的视图,表,函数和动态sql,也可以产生类似OOPL的效果,大幅度的减少数代码量

#7


随便。。。。。

#8


要看你擅长做什么处理了,如果你对SQL的处理比较熟练,那么建议尽量使用SQL来处理所有逻辑,界面层直接绑定即可。如果你不擅长写SQL语句,逻辑可以调整到外面c#处理……

#9


还好啦,我经常写这么长的

#10


引用 6 楼 microtry 的回复:
1.单纯从长度上说,这个就是一小段代码而已;
2.从设计角度说,sql开发尽量采用动态sql方式,
  这样可以把常用的数据对象的查询方法进行封装,
  实际上,充分利用数据库的视图,表,函数和动态sql,也可以产生类似OOPL的效果,大幅度的减少数代码量


嗯,谢谢啦!!!

#11


引用 楼主 qingYun1029 的回复:
不说语句质量及难易度。。

我想知道大家遇到这钟情况一般怎么处理???

是分到不同包含查询语句的函数里面还是像我这样一条语句写出来???

这条语句查询出来的都是一个页面上的所以“页签”所包含的内容,最后拼接如下:

SQL code1234567891011121314151617181920212223242526272829SELECT WF_w_……


我想说 若是给你个300多行的SQL 而且到处的join ,union,case,聚合函数,这种还得了
大家会写这么长的SQL语句么???

#12


还好,
我最近也在开发这种签字流程的业务系统,
sql语句也是相当的长,

#13


引用 5 楼 caozhy 的回复:
加一些 缩进看起来会好一点。

如果你把所有C#程序全部写在一行中(编译器允许你这么做),也会够呛的。

++1
实在觉得人为加太麻烦就用工具中的 format code=》format (ctrl+F11)

#14


谢谢各位啦。。。。

还以为写的太长呢。。。。。

#15


·要注意注释和规范啊·其实我个人感觉 sql处理起来要比 c#快· 一般能在SQL里面解决的 都在那里解决了·

#16


适当的使用视图或函数吧。还有可以利用 with语法还不错,层次感强一点,思路也会清晰。。

#17


哎,现在这个项目居然整出来了近万行的存储过程了,真无言了

#18


引用 16 楼 zifengshen1981 的回复:
适当的使用视图或函数吧。还有可以利用 with语法还不错,层次感强一点,思路也会清晰。。


+1

#19


基本上不这么写,显示归显示,逻辑归逻辑,数据归数据

我想问一下,你这到底归那里呢?为了显示而把数据按逻辑处理了?

#20


sql 语句到不算长 更长的我都写过

我个人写法 基本上不会用IsNull  case when...  

数据量大的时候 这玩意用多了貌似会影响Sql的执行性能。 
case when 还好 isnull比较有影响 前提是大数据量   

#21


这个还好,见过了,习惯了,本人表示毫无压力 大家会写这么长的SQL语句么???

#22


还好  大家会写这么长的SQL语句么???

#23


个人习惯,查询中的每个字段单独占一行
每个表连接单独占一行
每个条件单独占一行

反正就是尽量看着清楚,不怕长

#24


引用 19 楼 wanghui0380 的回复:
基本上不这么写,显示归显示,逻辑归逻辑,数据归数据

我想问一下,你这到底归那里呢?为了显示而把数据按逻辑处理了?


需要显示的数据查询出来输出。。。