当前位置:  数据库>sqlserver
本页文章导读:
    ▪SQLSERVER中WITH(NOLOCK)详解      NOLOCK 和 READPAST 都是处理查询、插入、删除等操作时候,如何应对锁住的数据记录。简单来说:NOLOCK 可能把没有提交事务的数据也显示出来.READPAST 会把被锁住的行不显示出来不使用 NOLOCK 和 .........
    ▪SQLSERVER错误状态      0 操作成功完成。 1 功能错误。 2 系统找不到指定的文件。 3 系统找不到指定的路径。 4 系统无法打开文件。 5 拒绝访问。 6 句柄无效。 7 存储控制块被损坏。 8 存储空间不足,无法处理此命.........
    ▪Sql学习第二天——SQL MDL与CTE解释      DML (Data Manipulation Language) 与 CTE (Common Table Expression)  今天看书时遇到的两个缩写,不知道其含义,于是就百度了一下,特地在此记录下来,以便于下次复习使用。  关于DML (Data Manipulation L.........

[1]SQLSERVER中WITH(NOLOCK)详解
    来源:    发布时间: 2013-10-15

NOLOCK 和 READPAST 都是处理查询、插入、删除等操作时候,如何应对锁住的数据记录。

简单来说:

NOLOCK 可能把没有提交事务的数据也显示出来.

READPAST 会把被锁住的行不显示出来

不使用 NOLOCK 和 READPAST ,在 Select 操作时候则有可能报错误:事务(进程 ID **)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。

演示一 没有提交的事务,NOLOCK 和 READPAST处理的策略:

查询窗口一请执行如下脚本:

CREATE TABLE t1 (c1 int IDENTITY(1,1), c2 int) 
go

BEGIN TRANSACTION 
insert t1(c2) values(1)

 

在查询窗口一执行后,查询窗口二执行如下脚本:

select count(*) from t1 WITH(NOLOCK) 
select count(*) from t1 WITH(READPAST)

 

结果与分析:

查询窗口二依次显示统计结果为: 1、0

查询窗口一的命令没有提交事务,所以 READPAST 不会计算没有提交事务的这一条记录,这一条被锁住了,READPAST 看不到;而NOLOCK则可以看到被锁住的这一条记录。

 

如果这时候我们在查询窗口二中执行:

select count(*) from t1 就会看到这个执行很久不能执行完毕,因为这个查询遇到了一个死锁。

 

清除掉这个测试环境,需要在查询窗口一中再执行如下语句:

ROLLBACK TRANSACTION 
drop table t1

 

演示二:对被锁住的记录,NOLOCK 和 READPAST处理的策略

 

这个演示同样需要两个查询窗口。

请在查询窗口一中执行如下语句:

CREATE TABLE t2 (UserID int , NickName nvarchar(50)) 
go 
insert t2(UserID,NickName) values(1,'lucas') 
insert t2(UserID,NickName) values(2,'fuckcpp') 
go

BEGIN TRANSACTION 
update t2 set NickName = 'fuckcpp.net' where UserID = 2

 

请在查询窗口二中执行如下脚本:

select * from t2 WITH(NOLOCK) where UserID = 2 
select * from t2 WITH(READPAST) where UserID = 2

 

结果与分析:

查询窗口二中, NOLOCK 对应的查询结果中我们看到了修改后的记录,READPAST对应的查询结果中我们没有看到任何一条记录。 这种情况下就可能发生脏读

本文链接


    
[2]SQLSERVER错误状态
    来源:    发布时间: 2013-10-15

0 操作成功完成。
1 功能错误。
2 系统找不到指定的文件。
3 系统找不到指定的路径。
4 系统无法打开文件。
5 拒绝访问。
6 句柄无效。
7 存储控制块被损坏。
8 存储空间不足,无法处理此命令。
9 存储控制块地址无效。
10 环境错误。
11 试图加载格式错误的程序。
12 访问码无效。
13 数据无效。
14 存储器不足,无法完成此操作。
15 系统找不到指定的驱动器。
16 无法删除目录。
17 系统无法将文件移到不同的驱动器。
18 没有更多文件。
19 介质受写入保护。
20 系统找不到指定的设备。
21 设备未就绪。
22 设备不识别此命令。
23 数据错误 (循环冗余检查)。
24 程序发出命令,但命令长度不正确。
25 驱动器无法找出磁盘上特定区域或磁道的位置。
26 无法访问指定的磁盘或软盘。
27 驱动器找不到请求的扇区。
28 打印机缺纸。
29 系统无法写入指定的设备。
30 系统无法从指定的设备上读取。
31 连到系统上的设备没有发挥作用。
32 进程无法访问文件,因为另一个程序正在使用此文件。
33 进程无法访问文件,因为另一个程序已锁定文件的一部分。
36 用来共享的打开文件过多。
38 到达文件结尾。
39 磁盘已满。
50 不支持网络请求。
51 远程计算机不可用 。
52 在网络上已有重复的名称。
53 找不到网络路径。
54 网络忙。
55 指定的网络资源或设备不再可用。
56 已到达网络 BIOS 命令限制。
57 网络适配器硬件出错。
58 指定的服务器无法运行请求的操作。
59 发生意外的网络错误。
60 远程适配器不兼容。
61 打印机队列已满。
62 无法在服务器上获得用于保存待打印文件的空间。
63 删除等候打印的文件。
64 指定的网络名不再可用。
65 拒绝网络访问。
66 网络资源类型错误。
67 找不到网络名。
68 超过本地计算机网卡的名称限制。
69 超出网络 BIOS 会话限制。
70 远程服务器已暂停,或正在启动过程中。
71 当前已无法再同此远程计算机连接,因为已达到计算机的连接数目极限。
72 已暂停指定的打印机或磁盘设备。
80 文件存在。
82 无法创建目录或文件。
83 INT 24 失败。
84 无法取得处理此请求的存储空间。
85 本地设备名已在使用中。
86 指定的网络密码错误。
87 参数错误。
88 网络上发生写入错误。
89 系统无法在此时启动另一个进程。
100 无法创建另一个系统信号灯。
101 另一个进程拥有独占的信号灯。
102 已设置信号灯且无法关闭。
103 无法再设置信号灯。
104 无法在中断时请求独占的信号灯。
105 此信号灯的前一个所有权已结束。
107 程序停止,因为替代的软盘未插入。
108 磁盘在使用中,或被另一个进程 锁定。
109 管道已结束。
110 系统无法打开指定的 设备或文件。
111 文件名太长。
112 磁盘空间不足。
113 无法再获得内部文件的标识。
114 目标内部文件的标识不正确。
117 应用程序制作的 IOCTL 调用错误。
118 验证写入的切换参数值错误。
119 系统不支持请求的命令。
120 此功能只被此系统支持。
121 信号灯超时时间已到。
122 传递到系统调用的数据区太小。
123 文件名、目录名或卷标语法不正确。
124 系统调用级别错误。
125 磁盘没有卷标。
126 找不到指定的模块。
127 找不到指定的程序。
128 没有等候的子进程。
130 试图使用操作(而非原始磁盘 I/O)的已打开磁盘分区的文件句柄。
131 试图移动文件指针到文件开头之前。
132 无法在指定的设备或文件上设置文件指针。
133 包含先前加入驱动器的驱动器无法使用 JOIN 或 SUBST 命令。
134 试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令。
135 试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令。
136 系统试图解除未合并驱动器的 JOIN。
137 系统试图解除未替代驱动器的 SUBST。
138 系统试图将驱动器合并到合并驱动器上的目录。
139 系统试图将驱动器替代为替代驱动器上的目录。
140 系统试图将驱动器合并到替代驱动器上的目录。
141 系统试图替代驱动器为合并驱动器上的目录。
142 系统无法在此时运行 JOIN 或 SUBST。
143 系统无法将驱动器合并到或替代为相同驱动器上的目录。
144 目录并非根目录下的子目录。
145 目录非空。
146 指定的路径已在替代中使用。
147 资源不足,无法处理此命令。
148 指定的路径无法在此时使用。
149 企图将驱动器合并或替代为驱动器上目录是上一个替代的目标的驱动器。
150 系统跟踪信息未在 CONFIG.SYS 文件中指定,或不允许跟踪。
151 为 DosMuxSemWait 指定的信号灯事件个数错误。
152 DosMuxSemWait 不可运行。已设置过多的信号灯。
153 DosMuxSemWait 清单错误。
154 输入的卷标超过目标文件系统的 长度限制
155 无法创建另一个线程。
156 接收进程已拒绝此信号。
157 段已被放弃且无法锁定。
158 段已解除锁定。
159 线程标识的地址错误。
160 传递到 DosExecPgm 的参数字符串错误。
161 指定的路径无效。
162 信号已暂停。
164 无法在系统中创建更多的线程。
167 无法锁定文件区域。
170 请求的资源在使用中。
173 对于提供取消区域进行锁定的请求不明显。
174 文件系统不支持锁定类型的最小单元更改。
180 系统检测出错误的段号。
183 当文件已存在时,无法创建该文件。
186 传递的标志错误。
187 找不到指定的系统信号灯名称。
196 操作系统无法运行此应用程序。
197 操作系统当前的配置不能运行此应用程序。
199 操作系统无法运行此应用程序。
200 代码段不可大于或等于 64K。
203 操作系统找不到已输入的 环境选项。
205 命令子树中的进程 没有信号处理程序。
206 文件名或扩展名太长。
207 第 2 环堆栈已被占用。
208 没有正确输入文件名通配符 * 或 ?,或指定过多的文件名通配符。
209 正在发送的信号错误。
210 无法设置信号处理程序。
212 段已锁定且无法重新分配。
214 连到该程序或动态链接模块的动态链接模块太多。
215 无法嵌套调用 LoadModule。
230 管道状态无效。
231 所有的管道实例都在使用中。
232 管道正在关闭中。
233 管道的另一端上无任何进程。
234 更多数据可用。
240 取消会话。
254 指定的扩展属性名无效。
255 扩展属性不一致。
258 等待的操作过时。
259 没有可用的数据了。
266 无法使用复制功能。
267 目录名无效。
275 扩展属性在缓冲区中不适用。
276 装在文件系统上的扩展属性文件已损坏。
277 扩展属性表格文件已满。
278 指定的扩展属性句柄无效。
282 装入的文件系统不支持扩展属性。
288 企图释放并非呼叫方所拥有的多用户终端运行程序。
298 发向信号灯的请求过多。
299 仅完成部分的 ReadProcessMemoty 或 WriteProcessMemory 请求。
300 操作锁定请求被拒绝。
301 系统接收了一个无效的操作锁定确认。
487 试图访问无效的地址。
534 算术结果超过 32 位。
535 管道的另一端有一进程。
536 等候打开管道另一端的进程。
994 拒绝访问扩展属性。
995 由于线程退出或应用程序请求,已放弃 I/O 操作。
996 重叠 I/O 事件不在信号状态中。
997 重叠 I/O 操作在进行中。
998 内存分配访问无效。
999 错误运行页内操作。
1001 递归太深;栈溢出。
1002 窗口无法在已发送的消息上操作。
1003 无法完成此功能。
1004 无效标志。
1005 此卷不包含可识别的文件系统。 请确定所有请求的文件系统驱动程序已加载,且此卷未损坏。
1006 文件所在的卷已被外部改变,因此打开的文件不再有效。
1007 无法在全屏幕模式下运行请求的操作。
1008 试图引用不存在的令牌。
1009 配置注册表数据库损坏。
1010 配置注册表项无效。
1011 无法打开配置注册表项。
1012 无法读取配置注册表项。
1013 无法写入配置注册表项。
1014 注册表数据库中的某一文件必须使用记录或替代复制来恢复。恢复成功完成。
1015 注册表损坏。包含注册表数据的某一文件结构损坏,或系统的文件内存映像损坏,或因为替代副本、日志缺少或损坏而无法恢复文件。
1016 由注册表启动的 I/O 操作恢复失败。注册表无法读入、写出或清除任意一

    
[3]Sql学习第二天——SQL MDL与CTE解释
    来源:    发布时间: 2013-10-15

DML (Data Manipulation Language) 与 CTE (Common Table Expression)

  今天看书时遇到的两个缩写,不知道其含义,于是就百度了一下,特地在此记录下来,以便于下次复习使用。

  关于DML (Data Manipulation Language):

    数据操纵语言,用户能够查询数据库以及操作已有数据库中的数据的计算机语言。具体是指是UPDATE更新、INSERT插入、DELETE删除。

  关于CTE (Common Table Expression):

    CTE(Common Table Expression) ,即公用表表达式,可以认为是在单个 SELECT、INSERT、UPDATE、DELETE 或 CREATE ⅥEW 语句的执行范围内定义的临时结果集。CTE与派生表类似,具体表现在不存储为对象,并且只在查询期间有效。与派生表的不同之处在于,CTE 可自引用,还可在同一查询中引用多次。
  CTE可用于:
  • 创建递归查询(我个人认为CTE最好用的地方)。
  • 在同一语句中多次引用生成的表。
  •   CTE优点:
  • 使用 CTE 可以获得提高可读性和轻松维护复杂查询的优点。
  • 查询可以分为单独块、简单块、逻辑生成块。之后,这些简单块可用于生成更复杂的临时 CTE,直到生成最终结果集。
  •   CTE可使用的范围:
      可以在用户定义的例程(如函数、存储过程、触发器或视图)中定义 CTE。
     
      下面看一个简单的CTE例题:
      把test表中salary最大的id记录保存在test_CTE中,再调用
      复制代码代码如下:
      with test_CTE(id,salary)
      as
      (
        select id,max(salary)
        from test
        group by id
       )
      select * from test_cte

     

    本文链接


        
    最新技术文章:
    ▪Sql Server里删除数据表中重复记录的例子
    ▪如何查看SQLSERVER中某个查询用了多少TempDB空间...
    ▪在SQL Server中使用ISNULL执行空值判断查询
    ▪揭秘SQL Server 2014有哪些新特性(1)-内存数据库
    ▪揭秘SQL Server 2014有哪些新特性(2)-固态硬盘 Buff...
    ▪揭秘SQL Server 2014有哪些新特性(3)-可更新列存...
    ▪揭秘SQL Server 2014有哪些新特性(4)-原生备份加...
    ▪解决SqlServer 各版本 sa帐户不能登录问题
    ▪浅析SQL Server中包含事务的存储过程
    ▪深入分析MSSQL数据库中事务隔离级别和锁机制
    ▪SQL优化技巧指南
    ▪人工智能自动sql优化工具--SQLTuning for SQL Server
    ▪使用 TOP 子句限制UPDATE 语句更新的数据
    ▪sql server动态存储过程按日期保存数据示例
    ▪SQLServer用存储过程实现插入更新数据示例
    ▪SqlServer中tempdb的日志机制原理解析及示例分享...
    ▪SqlServer数据库提示 “tempdb” 的日志已满 问题...
    ▪浅谈tempdb在SqlServer系统中的重要作用
    ▪SqlServer提示“列前缀tempdb.无效: 未指定表名”...
    ▪SQL命令优化需要记住的9点事项
    ▪教你如何看懂SQL Server查询计划
    ▪sql server 2000数据库备份还原的图文教程
    ▪SqlServer2012中First_Value函数简单分析
    ▪sql语句中单引号嵌套问题(一定要避免直接嵌...
    ▪谈谈sqlserver自定义函数与存储过程的区别
    ▪SQL SERVER使用REPLACE将某一列字段中的某个值替...
    ▪总结一周内学习的Sql经验(一)
    ▪sql存储过程详解
    ▪SQL Server UPDATE语句的用法详解
    ▪MSSQL事务的存储过程
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3