当前位置:  开发笔记 > 数据库 > 正文

最糟糕的SQL

如何解决《最糟糕的SQL》经验,为你挑选了7个好方法。

您见过的最糟糕的SQL查询是什么?是什么让它变坏了?



1> Robert Gambl..:
DELETE FROM table

在我输入并执行它之后看到,我忘记了WHERE子句.现在我总是首先运行一个SELECT语句,并在我确信正确的行会受到影响后将SELECT更改为DELETE.


我做了类似的事情,除了我在写作时将TableName写为TableNameFOO.在编写完整的电子邮件和校对之前,我还将电子邮件的"收件人:"字段保留为空...以防万一;)
我之前在工作时已经完成了这项工作,幸运的是我正在开发服务器,我刚刚恢复了最后一次工作的数据库备份.我还写了一个最近管理员工教育状况的网页,并省略了where子句.我们现在就说每个人都有学位.

2> Doug T...:

经典的xkcd当然是:

WHERE name = ROBERT'); DROP TABLE students;--


我们称他为Little Bobby Tables

3> shoosh..:

最糟糕的是每次使用 SQL查询:

一个SELECT查询,它计算对应于某个条件的行数,在for循环的停止条件中调用.
像这样的东西:

for(int i = 0; i < query("SELECT COUNT .... WHERE ..."); i++)
{

}

不,查询的结果不会每次迭代都改变.是的我意识到服务器将缓存结果.



4> Sean Bright..:

客户在varchar字段(经典ASP应用程序)中存储了3个值的逗号分隔列表,因此它们具有如下所示的存储过程:

SELECT *
FROM
    SomeTable
WHERE
    Field LIKE @Param + ',%'
    OR
    Field LIKE '%,' + @Param + ',%'
    OR
    Field LIKE '%,' + @Param

应该很明显为什么它太可怕了:)



5> gregjor..:

PL/SQL(Oracle)存储过程,使用冒泡排序对结果集进行排序.当我和DBA被要求弄清楚一个严重的性能问题时,就发现了它.开发人员,甲骨文"专家"已经为此工作了一个多星期.他直言不讳地解释说,他在计算机科学课上学到了泡泡排序.该算法通常用于说明性能不佳.

用ORDER BY子句替换整个混乱.性能提高了几个数量级.



6> Paul Tomblin..:
select * from users where clue > 0;
0 results found.


关于这个sql最糟糕的事情是它永远不会返回任何结果,无论你在哪里运行它
这就是为什么我们应该能够upvote评论:)
为什么这个错误的SQL?为什么要玩射击信使?

7> Bob Probst..:

我自己的,这里发布的时间很长 - 现在关闭3500线

我必须真正与一个绝对可怕的架构分担责任.最开始的一个简单的练习是使用一些工会转动非规范化数据,这变成了一个笨拙的噩梦.它非常需要维修.

亚军是这样的:

select 
case datepart(mm,getdate())
when 1 then 'Jan'
when 2 then 'Feb'
when 3 then 'March'
when 4 then 'Apr'
when 5 then 'May'
when 6 then 'Jun'
when 7 then 'July'
when 8 then 'Aug'
when 9 then 'Sept'
when 10 then 'Otc'
when 11 then 'Nov'
when 11 then 'Dec'
end

该帖子中没有拼写错误 - 这就是它的编写方式.谢谢,咨询美元!

我当然用Select left重构(datename(mm,getdate()),3)


我们在十二月发现了这颗宝石.
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有