【手记】小心在where中使用NEWID()的大坑
来源:互联网 发布:软件报价单模板 lic 编辑:程序博客网 时间:2024/06/13 12:59
这个表达式:
ABS(CHECKSUM(NEWID())) % 3 --把GUID弄成正整数,然后取模
是随机返回0、1、2这三个数,不可能返回其它东西,但是如果把它用在where里面,就会发生很神奇的事情,比如这个查询:
--创建一个只有1列3行的表,存放0,1,2三个值DECLARE @t TABLE(Col1 int)INSERT @tSELECT 0 UNION ALLSELECT 1 UNION ALLSELECT 2--然后随机查一行SELECT *FROM @tWHERE Col1 = ABS(CHECKSUM(NEWID())) % 3
按说每次执行会且只会得到一个0~2的数字,但多跑两次,你会得到各种神奇的结果,有返回两行的,有不返回的,肥肠蹊跷,一度让我怀疑人生,直到发现我不是一个人:
https://stackoverflow.com/questions/38498513/odd-sql-server-tsql-query-results-with-newid-in-the-where-clause
所以无法解决,只能插旗备忘,以后绕开,希望能给已经这样用或可能这样用的朋友提个醒。
-文毕-
阅读全文
0 0
- 【手记】小心在where中使用NEWID()的大坑
- 在SQL Server中使用NewID()方法产生随机集
- 小心使用放在App_Code中类的静态成员
- 在SqlServer2000的视图中小心使用*符号
- 在MSSQL和MYSQL的WHERE子句中使用CASE
- sql 在where子句中使用的运算符
- Android 在Service中启动Activity的大坑
- sqlserver中newid()和newsequentialid()的区别
- 在where中使用decode函数
- 在where子句中使用子查询
- Yii框架中使用Fixtures的一个大坑。。
- Sqlserver中插入100内的随机整数-rand、newId使用
- 在for,foreach语句中小心使用控件的SendToBack,BringToFront方法
- 在SpringMVC Action中使用事务需要特别小心的地方
- 使用缓存cache 的大坑
- Acache使用过程的大坑
- 在mysql的where使用group_concat
- 在.NET程序中小心使用String类型
- 立个小小的目标
- JavaScript基本语法基础
- openCV学习笔记(一) 基本概念和函数
- 以太坊客户端Ethereum Wallet与Geth区别简介
- Linux学习(三)Shell编程
- 【手记】小心在where中使用NEWID()的大坑
- 7219:复杂的整数划分问题
- 禁用某软件开机启动
- 机器学习-矩阵向量求导
- HNOI 2002 营业额统计(Splay树)
- mysql启动的四种方式
- 算法记录:击鼓传花问题c语言实现
- KD-Tree学习笔记
- storyboard 构建多tab页应用程序