当前位置:  数据库>sqlserver
本页文章导读:
    ▪SQL Server2012在程序开发中实用的一些新特性      SQL Server 2012已经发布一段时间了,最近在新的机器上安装了最新的SQL Server 2012 SP1,体检下感觉良好。官方给出了一大堆SQL2012相对于SQL2008R2的新特性,但是大多数对于普通开发人员来说都是浮.........
    ▪检查 2台电脑sql 数据同步冲突 的sql语句      国外的服务器跟国内的服务器 同步有时会冲突,原因很多。如网路 不畅通。没及时更新数据EXEC distribution..sp_replmonitorhelppublisher然后加上 飞信短信,就能及时 知道 关键数据不同步情况本.........
    ▪Sql学习第五天——SQL 关于apply的两种形式cross apply 和 outer apply      SQL 关于apply的两种形式cross apply 和 outer applyapply有两种形式: cross apply 和 outer apply先看看语法:  <left_table_expression>  {cross|outer} apply <right_table_expression>再让我们了解一下apply运.........

[1]SQL Server2012在程序开发中实用的一些新特性
    来源:    发布时间: 2013-10-25

SQL Server 2012已经发布一段时间了,最近在新的机器上安装了最新的SQL Server 2012 SP1,体检下感觉良好。官方给出了一大堆SQL2012相对于SQL2008R2的新特性,但是大多数对于普通开发人员来说都是浮云,根本用不到,下面就说说一些对于开发人员来说比较有用的新特性。

一、增加了Sequence对象。

这个对于Oracle用户来说是最熟悉不过的数据库对象了,现在在SQL Server中终于也看到了类似的对象,只是在使用的语法上有一点点不一样。创建语法也是CREATE SEQUENCE,使用的时候需要使用NEXT VALUE FOR来取下一个值:

CREATE SEQUENCE [dbo].[SQ_1]
AS [bigint]
START WITH 1
INCREMENT BY 1;

SELECT NEXT VALUE FOR [SQ_1] AS FirstUse;

如果要插入一个值,那么就是:

INSERT INTO t1(c1,c2)
VALUES (NEXT VALUE FOR SQ_1, 'Test') ;

但是好像没有提供获得当前值的语法,难道必须取下一个值?

二、新的分页查询语法。

以前在SQL Server中分页,最早是用top或者临时表,后来出现了ROW_NUMBER函数实现分页,现在最新的SQL2012可以在order by子句后跟offset和fetch来分页,感觉有点像是LINQ的语法。比如查询1W行之后的20条有效项目信息,那么ROW_NUMBER分页查询的SQL是:

select *
from
(
select *,ROW_NUMBER() over(order by p.PROJECT_ID) R
from PROJECT p
where p.IS_DELETED=0
) x
where x.R between 10001 and 10020

而是有了新的语法,那么查询语句就是:

SELECT *
FROM PROJECT p
where p.IS_DELETED=0
ORDER BY p.PROJECT_ID
OFFSET 10001 ROWS
FETCH NEXT 20 ROWS ONLY;

显然使用了新的语法后代码看起来更简洁,意思表达也更明确。从执行效率上来讲,试了一下,是一样的。

三、一些新的系统函数。

3.1相当于C#中三目运算符的IIF函数

这个函数和VBA中的IIF函数相同,判断第一个参数的表达式是否为真,真则返回第二个参数,假则返回第三个参数。

有了这个函数很多时候我们可以不用再使用复杂的case when语法了。比如我们判断项目的大小以显示对应的字符串,那么老的写法是:

select p.CODE,case when p.SIZE>100 then 'Big' else 'Small' end as SIZE_STRING
from PROJECT p
where SIZE is not null

现在,我们可以简单的写成:

select p.CODE,IIF(p.SIZE>100,'Big','Small') as SIZE_STRING
from PROJECT p
where SIZE is not null

3.2不用判断类型和NULL的字符串连接CONCAT函数

SQL Server本来对字符串的连接很简单,直接使用“+”号,但是需要注意两个问题,一是必须类型都是字符串类型,如果是数字类型那么会报语法错误,所以必须把数字类型转换为字符串。二是如果其中的某个值为null,那么整个连接的结果就是一个null字符串,所以还需要判断null,所以本来只是一个连接字符串的查询就会写的很复杂:

select p.PROJECT_ID, p.CODE+','+p.NAME+','+ISNULL(p.NICK_NAME,'')+','+ISNULL(CONVERT(varchar(50),p.SIZE),'')
from PROJECT p

现在使用CONCAT函数,直接忽略其中的类型,忽略对NULL的检查,直接连接成一个非空的字符串:

select p.PROJECT_ID,CONCAT( p.CODE,',',p.NAME,',',p.NICK_NAME,',',p.SIZE)
from PROJECT p


    
[2]检查 2台电脑sql 数据同步冲突 的sql语句
    来源:    发布时间: 2013-10-25

国外的服务器跟国内的服务器 同步有时会冲突,原因很多。如网路 不畅通。没及时更新数据

EXEC distribution..sp_replmonitorhelppublisher


然后加上 飞信短信,就能及时 知道 关键数据不同步情况

本文链接


    
[3]Sql学习第五天——SQL 关于apply的两种形式cross apply 和 outer apply
    来源:    发布时间: 2013-10-25

SQL 关于apply的两种形式cross apply 和 outer apply

apply有两种形式: cross apply 和 outer apply

先看看语法:

  <left_table_expression>  {cross|outer} apply <right_table_expression>

再让我们了解一下apply运算涉及的两个步骤:

  • A1:把右表表达式(<right_table_expression>)应用到左表(<left_table_expression>)输入的行;
  • A2:添加外部行;
  •   使用apply就像是先计算左输入,让后为左输入中的每一行计算一次右输入。(这一句很重要,可能会不理解,但要先记住,后面会有详细的说明)

    最后结合以上两个步骤说明cross apply和outer apply的区别:

      cross apply和outer apply 总是包含步骤A1,只有outer apply包含步骤A2,如果cross apply左行应用右表表达式时返回空积,则不返回该行。而outer apply返回改行,并且改行的右表表达式的属性为null。

    看到上面的解释或步骤大家可能还是一头的雾水,不知所云。下面用例子来说明:

    先建表一([dbo].[Customers]  字段说明:customerid -- 消费者id , city -- 所在城市):

     

    CREATE TABLE [dbo].[Customers](
    [customerid] [char](5) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [city] [varchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
    PRIMARY KEY CLUSTERED
    (
    [customerid] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]

     

    向表一插入数据:

    insert into dbo.Customers values('FISSA','Madrid');
    insert into dbo.Customers values('FRNDO','Madrid');
    insert into dbo.Customers values('KRLOS','Madrid');
    insert into dbo.Customers values('MRPHS','Zion');

    查询所插入的数据:

    select * from dbo.Customers

    结果如图:

    再建表二([dbo].[Orders]  字段说明:orderid -- 订单id  , customerid -- 消费者id):

    CREATE TABLE [dbo].[Orders](
    [orderid] [int] NOT NULL,
    [customerid] [char](5) COLLATE Chinese_PRC_CI_AS NULL,
    PRIMARY KEY CLUSTERED
    (
    [orderid] ASC
    )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]

    向表二插入数据:

    insert into dbo.Orders values(1,'FRNDO');
    insert into dbo.Orders values(2,'FRNDO');
    insert
        
    最新技术文章:
    ▪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