温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SQL SERVER出现cross the line怎么办

发布时间:2021-10-12 15:00:04 来源:亿速云 阅读:222 作者:柒染 栏目:大数据

SQL SERVER出现cross the line怎么办,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

SQL SERVER 在数据库的里面一直是以“绵羊”的身份出现,不如 ORACLE 的尊贵,也不如POSTGRESQL 的 犀利, 更没有MYSQL 的人气。但很多人的第一个开蒙的数据库就是SQL SERVER。SQL SERVER 的使用的面积是很广的,但这么好脾气的数据库,你若 cross the line, 那就休怪他 给你“趴窝”。

我们来看看下面的一个例子然后在讲讲,是怎么得罪了这个“小绵羊”

首先这个表,的表结构我们就不去关心了,主要的就是id 是主键

SQL SERVER出现cross the line怎么办

那我们的上面那个图的查询计划是很正常的,走主键。

SQL SERVER出现cross the line怎么办

到底是为什么一个简简单单的主键查询会搞成全表扫描,问题的关键就是

Implicit conversion in SQL Server

(表没有什么特别,就是用char作为主键)

SQL SERVER出现cross the line怎么办

下面我们就好好说说,这个隐士转换的问题, 首先明确的一个问题,隐士转换存在两个地方

1  给定的值没有类型, 你要SQL SERVER 给你猜, 然后猜错了

2  给定了类型,但不对,不是你对应表的字段类型,属于 X唇不对X嘴的情况

这两种情况最后的结果,继续用上面的例子,就是好好的 = 变成了  >  < 的操作

SQL SERVER出现cross the line怎么办

而反观正常的方式

SQL SERVER出现cross the line怎么办

当然问题已经说的很清楚了,解决也很简单,如果要在挖一下,SQL SERVER 的隐士转换也是有顺序的,下面就是顺序,1 用户定义,你的定义是第一位的,然后就开始以此类推的进行 “猜猜看” 的好戏了。

SQL SERVER出现cross the line怎么办

下面是一张表,这张表可以将类型(或者猜猜看),FROM TO  地来一个明确的表格化SHOW。

SQL SERVER出现cross the line怎么办

当然如果现在出现一个声音说,他们写的程序我怎么知道有没有隐士转换,或者一大堆的存储过程,我怎么知道隐士转换,那有没有方法揪出这些“害人精”。当然有办法,直接打开你的 extent event 的 plan_affecting_convert ,就能打开照妖镜,将他们一个个的抓出来。

所以我们在操作数据库的时候,无论是对应的字段是什么类型,你定义的,声明的,或者程序里面的,都最好和他“符合” ,否则 “小绵羊” 犄角的滋味也不大好受。

关于SQL SERVER出现cross the line怎么办问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI