您见过的最糟糕的SQL查询是什么?是什么让它变坏了?
DELETE FROM table
在我输入并执行它之后看到,我忘记了WHERE子句.现在我总是首先运行一个SELECT语句,并在我确信正确的行会受到影响后将SELECT更改为DELETE.
经典的xkcd当然是:
WHERE name = ROBERT'); DROP TABLE students;--
最糟糕的是每次使用 SQL查询:
一个SELECT查询,它计算对应于某个条件的行数,在for循环的停止条件中调用.
像这样的东西:
for(int i = 0; i < query("SELECT COUNT .... WHERE ..."); i++) { }
不,查询的结果不会每次迭代都改变.是的我意识到服务器将缓存结果.
客户在varchar字段(经典ASP应用程序)中存储了3个值的逗号分隔列表,因此它们具有如下所示的存储过程:
SELECT * FROM SomeTable WHERE Field LIKE @Param + ',%' OR Field LIKE '%,' + @Param + ',%' OR Field LIKE '%,' + @Param
应该很明显为什么它太可怕了:)
PL/SQL(Oracle)存储过程,使用冒泡排序对结果集进行排序.当我和DBA被要求弄清楚一个严重的性能问题时,就发现了它.开发人员,甲骨文"专家"已经为此工作了一个多星期.他直言不讳地解释说,他在计算机科学课上学到了泡泡排序.该算法通常用于说明性能不佳.
用ORDER BY子句替换整个混乱.性能提高了几个数量级.
select * from users where clue > 0; 0 results found.
我自己的,这里发布的时间很长 - 现在关闭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)