当前位置:  数据库>sqlserver
本页文章导读:
    ▪Sql学习第二天——SQL DML与CTE解释      DML (Data Manipulation Language) 与 CTE (Common Table Expression)  今天看书时遇到的两个缩写,不知道其含义,于是就百度了一下,特地在此记录下来,以便于下次复习使用。  关于DML (Data Manipulation L.........
    ▪SQLSERVER中WITH(NOLOCK)详解 [转]      NOLOCK 和 READPAST 都是处理查询、插入、删除等操作时候,如何应对锁住的数据记录。简单来说:NOLOCK 可能把没有提交事务的数据也显示出来.READPAST 会把被锁住的行不显示出来不使用 NOLOCK 和 .........
    ▪SQLSERVER中分发或合并代理中出现ID标识满阈值处理方法       SQLSERVER中分发或合并代理中出现ID标识满阈值处理方法sp_adjustpublisheridentityrange @publication ='发布数据库名', @table_name = null,@table_owner= null[ @publication=] 'publication'在其中重新分配新标识范围的.........

[1]Sql学习第二天——SQL DML与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

     

    本文链接


        
    [2]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对应的查询结果中我们没有看到任何一条记录。 这种情况下就可能发生脏读

    本文链接


        
    [3]SQLSERVER中分发或合并代理中出现ID标识满阈值处理方法
        来源:    发布时间: 2013-10-15

     

    SQLSERVER中分发或合并代理中出现ID标识满阈值处理方法

    sp_adjustpublisheridentityrange
    @publication ='发布数据库名',
    @table_name = null,
    @table_owner= null

    [ @publication=] 'publication'
    在其中重新分配新标识范围的发布的名称。publication 的数据类型为 sysname,默认值为 NULL。

    [ @table_name=] 'table_name'
    在其中重新分配新标识范围的表的名称。table_name 的数据类型为 sysname,默认值为 NULL。

    [ @table_owner = ] 'table_owner'
    发布服务器上表的所有者。table_owner 的数据类型为 sysname,默认值为 NULL。 如果没有指定 table_owner,则使用当前用户名。

    sp_adjustpublisheridentityrange 用于所有类型的复制。

    对于已启用自动标识范围的发布,分发代理或合并代理负责基于发布的阈值自动调整发布的标识范围。 但是,如果由于某种原因分发代理或合并代理停止运行了一段时间,并且已大量消耗了标识范围资源以至达到阈值,则用户可调用 sp_adjustpublisheridentityrange 为发布服务器分配新的范围值。

    在执行 sp_adjustpublisheridentityrange 时,必须指定 publication 或 table_name。 如果同时指定了这两个参数或二者都未指定,则将返回错误。

    本文链接


        
    最新技术文章:
    ▪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中包含事务的存储过程
    ▪在SQL Server中使用ISNULL执行空值判断查询 iis7站长之家
    ▪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