表表达式,Substring, CharIndex, 多行数据变同一行的用法
摘要:参考: https://www.cnblogs.com/cnki/p/9561427.html https://www.cnblogs.com/johnwood/p/6386613.html 1.表1: objid instancename Server1.uuu Instance1 Server2
阅读全文
posted @
2019-03-07 14:08
BobLiu
阅读(230)
推荐(0) 编辑
曾经用过的Sql Server分页方法小结
摘要:工作这些年, 数据库分页也用过几种方案, 总结如下:1.用row_number函数及临时表分页, 适用sql 2005/2008. 大致思路如下:SELECT *, ROW_NUMBER() OVER (ORDER BY OrderID DESC ) AS rownumber into #SOFROM tbl_SalesOrderWhere condition...SELECT *FROM #SO Where (#SO.rownumber between 1 AND 15order by #SO.RowNumber 2.用row_number函数及表表达式分页, 适用sql 2005/2008
阅读全文
posted @
2012-02-14 22:13
BobLiu
阅读(634)
推荐(0) 编辑
嵌套循环连接(Nested Loops), 合并联接(Merge), 哈希联接(Hash)的适用情况
摘要:1.嵌套循环连接(Nested Loops)适用范围两个表, 一个叫外部表, 一个叫内部表.如果外部输入非常小,而内部输入非常大并且已预先建立索引,那么嵌套循环联接将特别有效率。关于连接时哪个表为outer表,哪个为inner表,我发现sql server会自动给你安排,和你写的位置无关,它自动选择数据量小的表为outer表, 数据量大的表为inner表。2.合并联接(Merge)指两个表在on的过滤条件上都有索引, 都是有序的, 这样, join时, sql server就会使用Merge join, 这样性能更好.如果一个有索引,一个没索引,则会选择Nested Loops join.3.
阅读全文
posted @
2011-11-21 16:13
BobLiu
阅读(4840)
推荐(1) 编辑
SQL子句执行顺序和Join的一点总结
摘要:1.笛卡尔积(Cartesian product)顾名思义, 这个概念得名于笛卡儿. 在数学中,两个集合 X 和 Y 的笛卡儿积(Cartesian product),又称直积,表示为 X × Y,是其第一个对象是 X 的成员而第二个对象是 Y 的一个成员的所有可能的有序对.假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。2.Join类型cross
阅读全文
posted @
2011-10-27 16:54
BobLiu
阅读(22329)
推荐(10) 编辑
ROW_NUMBER() OVER (ORDER BY OrderConfirmTime DESC) 中, 如果OrderConfirmTime不唯一, 会造成分页中的数据重复问题.
摘要:如题, 真实的系统中有有多条数据有完全一致的OrderConfirmTime确认时间, 因此以此分出的页中, 第2页中出现的数据有可能还出现在第3页中.查了一下才知道, 排序的列如果不能唯一确认行的顺序,就会造成这个问题。解决办法也很简单, 后面再加一个订单编号作为最后一个排序字段,问题就解决了,如下: ROW_NUMBER() OVER (ORDER BY OrderConfirmTime DESC, OrderID ) AS RowNumber
阅读全文
posted @
2011-10-26 16:52
BobLiu
阅读(1091)
推荐(0) 编辑
关于 FROM a,b where a.id=b.id和 a LEFT JOIN b on a.id=b.id的区别
摘要:关于 FROM a,b where a.id=b.id和 a LEFT JOIN b on a.id=b.id的区别两者是等价的, 前者是隐式的内连接.一般用后者, sql语句看起来清晰一些.明确队隐含的SQL联接 http://zh-cn.w3support.net/index.php?db=so&id=44917SQL: difference between inner and outer joinhttp://stackoverflow.com/questions/38549/sql-difference-between-inner-and-outer-join
阅读全文
posted @
2011-10-14 15:56
BobLiu
阅读(546)
推荐(0) 编辑
SQL Server 2008数据库的一些基本概念
摘要:以前总是没弄明白这些基本概念,现在整理如下:1.区: 区是SQL Server 中管理空间的基本单位。一个区是八个物理上连续的页(即 64 KB),所有页都存储在区中, 这意味着 SQL Server 数据库中每 MB 有 16 个区。一旦一个区段已满, 下一条数据Sql server将分配一个区段空间, 防止每次添加都要分配空间.2.页(Page): 页是SQL Server 中数据存储的基本单位, 它是区段的分配单元, 一页8K, 它下面就是数据行了, 但每页的行数不定, 这取决于数据行的大小.数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n
阅读全文
posted @
2011-10-11 15:29
BobLiu
阅读(2058)
推荐(0) 编辑
SQL Server 2008 创建索引视图(物化视图) 的一点总结
摘要:SQL Server 2008 的索引视图似乎只能通过sql命令的方式创建, 暂未找到可视化创建的办法, 有谁知道吗?要点:1.必须要加上WITH SCHEMABINDING, 就是绑定到架构.2.创建完视图后, 必须紧跟着创建一个CLUSTERED聚集唯一索引.3.只支持两部分命名的表或UDF, 如dbo.SalesOrder.4.涉及到多个表连接时, 不支持left join 或inner join的写法, 只能用from...where的方式或inner join的方式连接. (这一点有时很要命, 如果join多个表, 而这些表又不能都用inner join的方式时.)5.不支持tabl
阅读全文
posted @
2011-10-10 16:18
BobLiu
阅读(22824)
推荐(4) 编辑
关于 "7625: 全文表或全文索引视图在其全文索引列中有多个 LCID" 问题的解决办法。
摘要:SQL server 全文检索使用中有时会遇到下面这个错误:7625: 全文表或全文索引视图在其全文索引列中有多个 LCID。English translation: Full-text table or indexed view has more than one LCID among its full-text indexed columns.见外国一帖子, 忘记链接了,照抄如下:It seems that in your full-text query are querying more than one column and one of the columns is using a
阅读全文
posted @
2011-10-09 15:49
BobLiu
阅读(937)
推荐(0) 编辑
SQL Server 2008 全文搜索的一些知识
摘要:一. 看了几篇不错的帖子, SQL Server 2008 Full-Text Search Overview(SQL Server 2008全文检索概览)http://www.cnblogs.com/galaxyyao/archive/2009/02/13/1390139.html全文索引 http://www.cnblogs.com/liulun/articles/1368655.html先照抄一段:Q:为什么要Full-text search(全文检索)?A:因为对文字的查询速度慢(不建议在文字上建索引也就是这个道理)Q:和2005有区别么?A;当然有区别,名字前都加了个integrat
阅读全文
posted @
2011-10-08 18:01
BobLiu
阅读(4536)
推荐(0) 编辑
Sql Server 2008 全文索引支持跟踪更改的自动填充方式,太他妈省心了!
摘要:全文索引填充:http://msdn.microsoft.com/zh-cn/library/ms142575(v=SQL.100).aspxSql Server 2008 全文索引支持填充方式有三种:1.完全填充创建全文索引时找不到在哪里选择完全填充,原来,它默认只要创建好全文检索就来一次完全填充。2.基于更改跟踪的填充 在跟踪更改处选择自动就行了,这就ok了,太他妈省心了。如果选择手动,他可是不管给你自动填充的。 3.基于时间戳的增量填充基本用不到,因为他要求你表里必须具有 timestamp 数据类型的列,没有这种列,就甭考虑了。总结:使用跟踪更改的自动填充方式,就不用操心定期计划更新全
阅读全文
posted @
2011-09-30 15:37
BobLiu
阅读(2316)
推荐(0) 编辑
Lucene.Net, SQL Server 2008全文检索, Like模糊查询的一点心得
摘要:1.Like 模糊查询例如: select * from table where productdes like '%cad%'它不能利用索引查询, 只能是全表扫描, 效率较低, 而且不会分词, 只能按关键字老老实实的查, 但查询实时数据, 结果准确.2.SQL Server 2008全文检索为了提高效率, 换用sql server的全文检索, 怎么建全文检索就此略去, 不提, 只看查询方法.例如: select * from table where contains(ProductDesc, '*cad*')它查询的效率很高, 支持中文分词(但好不好就另说了)
阅读全文
posted @
2011-09-28 17:51
BobLiu
阅读(9477)
推荐(11) 编辑
SQL Server 2008 full-text search 全文检索的弱点(不支持后缀模糊查询)
摘要:这两天做了一下测试, 发现MS SQL Server 2008 full-text search 全文检索对英文内容的检索有个很大的问题, 就是它只支持前缀模糊查询(即*号在后面), 而不支持后缀模糊查询(即*号在前面), 举个例子:1.不用全文检索, 用传统的like, 能模糊查询到所有带cad后缀的英文条目.select * fromTable1 where Productname like '%cad'结果AutocadTT cadcad2.用全文检索, 用contains, 却不能模糊查询到所有带cad后缀的英文条目.select * fromTable1 where
阅读全文
posted @
2011-09-20 18:01
BobLiu
阅读(2230)
推荐(0) 编辑
SQL Server 2008事务日志的[RowLog Contents 0] 字段没人能解析出来?
摘要:Reading SQL Server's Transaction Loghttp://www.sqlservercentral.com/articles/Transaction+Log/71415/http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=152870如何查看SQL Server的事务日志 .分类: sql server 2005 2011-01-12 13:33 19人阅读 评论(0) 收藏 举报 在SQL Server 7.0和SQL Server2000中,可以用下面的命令查看:DBCC log ( {dbid|dbname
阅读全文
posted @
2011-08-26 17:57
BobLiu
阅读(1987)
推荐(0) 编辑
SQL Server 2008 的 tempdb 数据库在每次SQL Server重新启动时都会重建, 而不是恢复tempdb数据库.
摘要:启动行版本后,tempdb占了1.5G,但今天发现只有400M了,怪事,昨天重起过一次sql server,一查才知道,SQL Server 2008 的 tempdb 数据库在每次SQL Server重新启动时都会重建, 而不是恢复tempdb数据库.tempdb: 存储SQL Server在查询处理和排序时内部产生中间结果的工作表,维护用在快照隔离级别和某些其他操作的行版本,填充静态游标和键集游标的键值都会用到该数据库。Tempdb的大小和配置对优化SQL Servere的功能和性能都至关重要。
阅读全文
posted @
2011-08-03 10:13
BobLiu
阅读(2742)
推荐(0) 编辑
Sql server 2008 两种行版本管理的区别比较.
摘要:两种行版本管理的区别比较汇总如下:READ COMMITTED SNAPSHOT: 使用通过行版本控制的已提交读 1.改动少, 只alter database设置一下read_committed_snapshot on即可 2.读最新, 每句执行时读取已提交的版本, 因此能读取其他事务已经提交的最新数据; 3.能更新其他事务稍后更新的数据。 3.省空间,占用的 tempdb 空间少。 5.支持分布式事务。ALLOW SNAPSHOT ISOLATION: 快照隔离 1.改动多, 除了alter datatable设置allow_snapshot_isolation on, 还有在每个事务开始.
阅读全文
posted @
2010-11-18 18:25
BobLiu
阅读(677)
推荐(0) 编辑
Sql Server 2005/2008 SqlCacheDependency查询通知的使用总结
摘要:Sql server 7.0/2000下 SqlCacheDependency使用轮询的方式进行缓存失效检查, 虽然ms说对服务器压力不大, 但还是有一些的, 而且对于不常改动的混存内容无休止的轮询感觉有点浪费, 不很经济.Sql server 2005/2008下增加使用查询通知方式进行缓存失效检查, 它通过Sql Server内部的消息队列进行异步通知, 这样就大大减轻了服务器的压力, 实现的很经济, 下面就是具体的步骤:1.检测是否已经启用Service Broker Select DATABASEpRoPERTYEX('数据库名称','IsBrokerEnabl
阅读全文
posted @
2010-03-25 17:55
BobLiu
阅读(5392)
推荐(1) 编辑