一.业务场景 我们在实际生产环境中遇到了这样一种需求,即需要检索一个父子关系的子树数据 估计大家也遇到过类似的场景,最典型的就是省市数据,其中path字段是按层级关系生成的行政区路径: 如果我们已知某市名,想查出同级和高一级的省名,如保定市同级和上级河北省,那么我们有什么实现方式呢 给大家10秒钟,快速抢答 . . . 时间到 大概有以下几种方法: a.2008中新添加的层级数据类型 b.cte递归方式 c.直接程序处理 d.比较傻的方式:全文索引... 层级关系是实现这种业务逻辑的最好方式,比…
一.业务场景 我们在实际生产环境中遇到了这样一种需求,即需要检索一个父子关系的子树数据 估计大家也遇到过类似的场景,最典型的就是省市数据,其中path字段是按层级关系生成的行政区路径: 如果我们已知某市名,想查出同级和高一级的省名,如保定市同级和上级河北省,那么我们有什么实现方式呢 给大家10秒钟,快速抢答 . . . 时间到 大概有以下几种方法: a.2008中新添加的层级数据类型 b.cte递归方式 c.直接程序处理 d.比较傻的方式:全文索引... 层级关系是实现这种业务逻辑的最好方式,比…
本文关键字:SQL Server全文索引.CONTAINS.FREETEXT.CONTAINSTABLE.FREETEXTTABLE等谓词. 想象这样一个场景:在DataBase_name.dbo.Table_name中有一个名为Title(标题)和Contents(内容)的字段,现在需要查询在Title或者Contents中包括“qq”字符的所有记录. 面对这样的一个场景,我们通常都会写这样一个脚本:SELECT * FROM DataBase_name.dbo.Table_name WHER…
1.当数据库已经建好在DB里,SQL Server 2005 和 SQL Server 2008使用.Bak文件还原的时候,会出现 error : "The backup set holds a backup of a database other than the existing" 查了网上的方法: 方法一[未验证] [sql] view plaincopy --返回由备份集内包含的数据库和日志文件列表组成的结果集. --主要获得逻辑文件名 --返回由备份集内包含的数据库和日志文件…
本文关键字:SQL Server全文索引.CONTAINS.FREETEXT.CONTAINSTABLE.FREETEXTTABLE等谓词. 想象这样一个场景:在DataBase_name.dbo.Table_name中有一个名为Title(标题)和Contents(内容)的字段,现在需要查询在Title或者Contents中包括“qq”字符的所有记录. 面对这样的一个场景,我们通常都会写这样一个脚本:SELECT * FROM DataBase_name.dbo.Table_name WHER…
概述 全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询.全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中.全文索引是一种特殊类型的基于标记的功能性索引,它是由 SQL Server 全文引擎生成和维护的.生成全文索引的过程不同于生成其他类型的索引.全文引擎并非基于特定行中存储的值来构造 B 树结构,而是基于要编制索引的文本中的各个标记来生成倒排.堆积且压缩的索引结构.在 SQL Server 2008 中,全文索引大小仅受运行 SQL Server 实例的…
在安装数据库管理系统SQL Server 后,默认情况下全文索引的服务是没有开启的 ,所以首先需要先开启服务,在sql server配置管理器中 (sql server configuration Manager)中点击sql server services ,选中SQL Full-text filter daemon Lunch,点击属性在Log On  lab 查看是否启动该服务,如果没有 启动 ,在services里面选择将其启动 .并且在Log On Lab 界面选择Local Syst…
简介 在软件开发过程中,版本控制是一个广为人知的概念.因为一个项目可能会需要不同角色人员的参与,通过使用版本控制软件,可以使得项目中不同角色的人并行参与到项目当中.源代码控制使得代码可以存在多个版本,而不会将代码库变得混乱,典型的场景包括Bug修复.添加新功能.版本整合等. 虽然在开发层面的版本控制软件已经非常成熟,但目前国内还没有专门针对数据库层面的版本控制软件来帮助不同角色的人员在数据库层面进行团队协作.变更代码管理以及对数据库的变更进行查看和比对.在数据库层面版本控制工具的缺乏可能会出现如…
摘录些许sqlserver 常用到的一些函数,便于日常学习使用 一.字符转换函数1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错.2.CHAR()将ASCII 码转换为字符.如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL .3.LOWER()和UPPER()LOWER()将字符串全部转为小写:UPPER()将字符串全部转为大写.4.STR()把…
全文索引不同于常见的聚集索引或非聚集索引,这些索引的内部实现是平衡树(B-Tree)结构,而全文索引在物理上是由一系列的内部表(Internal tables)构成的,这些内部表称作全文索引片段(Fragment),每一个索引片段也叫做一个倒转索引(Inverted index),也就是说,每一个倒转索引都是由一个内部表(Internal Table)实现的. 有一些好奇的朋友可能会发问:“为什么一个全文索引是由一系列的倒转索引构成的,而不是一个?为什么叫做倒转索引,把什么倒转了?” 当新建全文…
转载来源: https://blog.csdn.net/zengcong2013/article/details/78648988. sql server 2008R2数据库导出表里所有数据成insert 语句 有时候,我们想把数据库的某张表里的所有数据导入到另外一个数据库或另外一台计算机上的数据库,对于sql server有这样的一种方法 下面我以sql server 2008 R2,数据库是Northwind数据库为例, 目标:把Northwind数据库的Orders表导出成insert语句…
此文为转载文章,描述的很好,没有验证过. 最近遇到了一个看上去很奇怪,分析起来很有意思的死锁问题.这个死锁看上去难以理解.而分析过程中,又使用了很多分析SQL Server死锁的典型方法.记录下来整个分析过程还是很有意义的. 问题重现步骤: 经过提炼,问题重现的步骤非常简单,在SQL 2008上可以很容易地重现. 1.         首先,创建一张表格,上面有一个clustered index,两个non-clustered index. create table tt(id int iden…
10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控等信息的记录收集起来,并将数据保存在MDW(Management Data Warehouse,管理数据仓库)中,MDW为用户们提供了非常方便的性能分配报表. 10.2.1 MDW的配置 开启SQL SERVER的MDW功能,要求数据库需要开启SQL Server 代表(Agent)服务.配置MDW…
数据库结构和索引的是否合理在很大程度上影响了数据库的性能,但是随着数据库信息负载的增大,对数据库的性能也发生了很大的影响.可能我们的数据库在一开始有着很高的性能,但是随着数据存储量的急速增长—例如订单数据—数据的性能也受到了极大的影响,一个很明显的结果就是查询的反应会非常慢.在这个时候,除了你可以优化索引及查询外,你还可以做什么?建立分区表(Table Partition)可以在某些场合下提高数据库的性能,在SQL Server 2005中也可以通过SQL语句来创建表分区,但在SQL Serve…
问题描述 某维度表的字符串列同时出现两条记录,A记录以半角空格(英文空格)结束,B记录以全角空格(中文空格)结束,除此之外其他部分均相同.Analysis Service处理的时候抛出“Key not found”的异常,导致处理失败. 为了实验,我们创建两张非常简单的表: -- 员工交易事实表 Create Table [FactTransaction]( [TransactionKey] [int] not null, [EmployeeKey] [int] not null ) -- 员工…
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block } audio,canvas,progress,video { display: inline-block; vertical-align: baseline } audio:not([co…
昨天去客户,发现程序无法应用,跟踪错误提示,提示的大致意思是“数据库表名和数据库字段名不存在”.查询后发现是SQL Server数据库设置了区分大小写的缘故(一般安装时,Oracle的正确安装下是默认转换为大写:SQL Server数据库是不转换为大写,但是使用时并不区分大小写): 下面语句是设置SQL Server数据库是否区分大小写:(表名和数据库字段名)--修改数据库不区分大小写alter database 数据库名称 COLLATE Chinese_PRC_CI_AS如:alter da…
简介 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入.更新或删除操作.例如,根据在另一个表中找到的差异在一个表中插入.更新或删除行,可以对两个表进行同步.”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的.    可以想象出,需要使用Merge的场景比如: 数据同步 数据转换 基于源表对目…
在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例,递归查询主要用于层次结构的查询,从叶级(Leaf Level)向顶层(Root Level)查询,或从顶层向叶级查询,或递归的路径(Path). 一,递归查询原理 CTE的递归查询必须满足三个条件:初始条件,递归调用表达式,终止条件,CTE 递归查询的伪代码如下: WITH cte_name (…
本问题基于上海sql server dba技术群提问分析总结而成: 群友问题: 就是一台服务器有数据库A,但没有数据库B(A和B有相同得表),我把B数据库的建表语句执行了在use A环境下了,为什么A数据库会被修改呢? 建表语句如下: 过程分析: [1]首先,之前在运行脚本的时候,数据库选择的肯定是use A [2] 然后当use b的时候,会报错,因为有GO做提交,GO与GO之间的文本互不影响,所以图中的use B会报错找不到数据库,但是随后接了GO [3] 所以并没有切换到B(仍在use A…
目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 内存优化表的索引 并发能力的提升 和竞争对手相比几点 Getting Start 内存数据库的使用 存储 TSQL支持 简介: 内存数据库(In-Memory OLTP),代号Hekaton 设计目的和原因: 将请求的负荷放到内存中 减少数据延迟 来适应特殊的负荷类型 如果数据都是在内存中,那么当前的数据库优化器产生的执行计划是没什么意义的,因为现在的…
简介SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护数据一致性.使用复制功能不仅仅需要你对业务的熟悉,还需要对复制功能的整体有一个全面的了解,本系列文章旨在对SQL Server中的复制进行一个简单全面的探讨.(PS:在我的上篇文章中我发现某些文章的图片使用mspaint手绘更有感觉,但被很多人吐槽,因此在不考虑个人羞耻感的前提下,本系列文章中的一些图…
创建表结构 CREATE TABLE test( ,) NOT NULL PRIMARY KEY, ) COLLATE Chinese_PRC_CI_AS NULL, createdTime DATETIME DEFAULT GETDATE() ) 使用output获得自增ID值 没使用output前的写法,用Score_Identity函数获取自增值 INSERT INTO dbo.test ( name ) VALUES ( N'测试数据') SELECT SCOPE_IDENTITY();…
SQL脚本是一种用SQL语言写的批处理文件(.sql),SQL脚本通常可以由SQL查询分析器来执行. ===================================================== GO向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号.go是把t-sql語句分批次執行.(一步成功了才会执行下一步,即一步一个GO)     语法    GO       注释    GO   不是Transact-SQL语句:而是可为cmdsql和os…
简介 Merge关键字是一个神奇的DML关键字.它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句.MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入.更新或删除操作.例如,根据在另一个表中找到的差异在一个表中插入.更新或删除行,可以对两个表进行同步.”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的. 可以想象出,需要使用Merge的场景比如: 数据同步 数据转换 基于源表对目标表做…
这两天改 Bug 时使用 Sql Server 的子查询遇到了一些问题,特此记录一下,之前用 MySQL 比较多,按照 MySQL 的语法其实是没有问题的. 以下面这张表为例: 执行以下 SQL: select * from ( select * from t_book order by number ) ttt 会报出下面的错误: > Msg 1033, Level 15, State 1, Server WIN-IOR47PKR2AD, Procedure , Line 0 除非另外还指定了…
GitHub:https://github.com/fissoft/Fissoft.EntityFramework.Fts EntityFramework中原来使用全文索引有些麻烦,需要使用DbContext.Database.SqlQuery或Execute去直接执行SQL.那样不能靠编译来检查读法错误,重构也不方便. 不过EF6增加Interceptor,可以执行前置和后置操作. Eg: public class FtsInterceptor : IDbCommandInterceptor…
昨天晚上突然接到客户的电话, 说在配置了镜像的生产环境数据库下修改 “已提交读快照” 选项的时候报错, 需要先取消镜像然后再重新搭建.悲催的是这是个近TB的数据库,问我有没有什么快速的方法.于是我就问客户为什么觉得时间长,他说重新搭建镜像的时候要先做完整备份然后再在镜像节点还原这个步骤会花费大量的时间.那么实际需要这么做吗? 在镜像数据库下修改 “已提交读快照” 选项 取消镜像后就会看到镜像节点的数据库的状态 从 “镜像,已同步/正在还原” 变成 “正在还原...”,不要删除它,它还有用. 修改…
今天很高兴 ,有学会了一种数据库优化的方式,哈哈 今天遇到一個查詢逾時的問題:兩段SQL,只差在WHERE,一個是WHERE COLUMN1='AAA',一個是WHERE COLUMN1='BBB',產生的執行計畫卻不一樣:一個用PK索引,一個用IX索引(叢集索引跟非叢集索引的差別?) 查到兩種方法,INDEX()跟FORCESEEK INDEX('指定索引名稱') FORCESEEK 指定從哪個資料表搜尋 --系統會自動選用IX_indexselect count(1)from table1…
create table Document(ID int not null,Name nvarchar(255) not null,Body nvarchar(max) not null);go create unique index uq_ix_for_Document  --#这里一定要加一个not null unique的索引下面会用到.没有这个就不可以加全文索引.on Document(ID);go create fulltext catalog ftt_clg_for_Studioas…