如何通过一个值查找到值所在的SQL数据库表?

如何通过一个值查找到值所在的SQL数据库表?,第1张

1、首先新建一张最简单的数据库表,id自增长。

2、然后在表中插入重复值。

3、接着新建视图,首先要确定自己的删除规则是什么样的,删除编号id比较大的还是比较小的。

4、然后将视图select语句粘贴到删除语句后面,执行删除语句。

5、最后查看删除后结果,就完成了。

一、堆

1、sqlserver在sysindexes表中查到对应的数据行

2、读取indid值(应为堆没有索引所以是0)后,sqlserver开始读取firstIAM值,获取堆的IAM的第一页(8KB)的位置。(IAM将堆的各个区域联接在一起)

3、sqlserver根据IAM提供的区域地址,一个区域一个区域的查找,一个数据页一个数据页的查找,直到获取所需的数据为止。

二、簇索引

1、sqlserver在sysindexes表中查到对应的数据行,找到indid为1后,sqlserver开始读取root列的值。(列值是根页面的地址)

2、找到根页面后开始搜索,比如要搜索的表是10条记录一页,这里是找“1981”这个值,将索引的值“1981”与根页面的索引比较。由于“1981”是在1900到2000之间。所以sqlserver开始搜索1900所在的中间页。

3、找到“1900”所在的中间页后,将索引值“1981”继续与中间页的索引比较,由于“1981”是在1980到1990之间。所以sqlserver开始搜索1980所在的数据页。(注意这一步是根据中间页找数据页)

4、找到“1980”所在的数据页后,将索引值“1981”继续与数据页的索引比较,很快就可以在这个数据页上找到“1981”的数据行了。

三、非簇索引

1、sqlserver在sysindexes表中查到对应的数据行,找到indid为后,值为2到251后,sqlserver开始读取root列值。

2、找到根页面后,将“1981”与根页面的索引比较,由于“1981”是在1900到2000之间。所以sqlserver开始搜索1900所在的中间页。(注意这一步是根据中间页找叶页面)

3、找到中间页后,将索引值“1981”继续与中间页的索引比较,由于“1981”是在1980到1990之间。所以sqlserver开始搜索1980所在的叶页面。

4、找到“1980”所在的叶页面后,继续叫索引值“1981”与叶页面上的关键字比较,在叶页面上找到关键字为“1981”的数据行ID。

5、根据数据行ID提供的数据页和数据行信息,定位到指定的数据页和数据行,找到“1981”这条记录是“晶”的。

按照楼上的说法,取date值可以这样:

var

dateValue_low, dateValue_high: string

begin

DateTimeToString(dateValue_low,'YYYY-MM-DD',DateTimePicker1.DateTime)

DateTimeToString(dateValue_high,'YYYY-MM-DD',DateTimePicker1.DateTime)

//。。。

end

格式可设定,在YYYY-MM-DD中。

然后再按照楼上的sql语句,

'select * from tablename

where birthday between + ' ''' + datevalue_low + ''' ' + ' and ' + ' ''' + datevalue_high+ '''

sql语句我不熟,记得调试的时候,好像用过类似这样的:

'Select * from birthday from tablename

where birthday >'2010-12-17 00:00:00' '


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6737515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存