1,values 的新用法,出现自2008

SELECT * FROM  table AS a
,,,'qq3')) tem(id,name) ON a.id=tem.id

insert into xxxx values(),(),() 语句,最多可包含1000行,否则报错

The number of row value expressions in the INSERT statement exceeds the maximum allowed number of 1000 row values.

http://blog.csdn.net/downmoon/article/details/5936706

2,新的分页方式,出现自2012,不知道以后会不会流行起来

 ROWS fetc  ROWS only

http://www.cnblogs.com/CareySon/archive/2012/03/09/2387825.html

3,output,貌似从2005就有了。很华丽的功能

用法很多,可以使用的操作有 insert,update,delete,merge

写一种用法:获取批量插入后的自增id

DECLARE @idTb TABLE(iid)
INSERT INTO [table1]
OUTPUT INSERTED.id
INTO @idTb
SELECT id,name FROM [table2]

注意:update statement 的结果集不是存在updated里,是在inserted里。从output的结果集可以看出来,output的update操作其实分为了insert+delete两个结果集

http://www.cnblogs.com/yuananyun/archive/2010/12/04/1896276.html

http://msdn.microsoft.com/en-us/library/ms177564.aspx

4,merge,数据处理,出现自2008

注意,merge要以分号结束,有output的话,也算在merge语句内部


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[source_table]') AND type in (N'U'))
DROP TABLE [dbo].[source_table]
GO
CREATE TABLE [dbo].[source_table](
    ,) NOT NULL,
    ) NULL,
    ) NULL,
    [date] [datetime] NULL
) ON [PRIMARY]

GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[target_table]') AND type in (N'U'))
DROP TABLE [dbo].[target_table]
GO
CREATE TABLE [dbo].[target_table](
    ,) NOT NULL,
    ) NULL,
    ) NULL,
    [date] [datetime] NULL
) ON [PRIMARY]

GO

INSERT INTO dbo.source_table
        ( code, name, date )
',
          'test1',
          '2014-05-23 07:34:23'
          )
          ,
          ( ',
          'test2',
          '2014-05-25 07:34:23'
          )

INSERT INTO dbo.target_table
        ( code, name, date )
',
          'test11',
          '2014-05-23 07:34:23'
          )
          ,
          ( ',
          'test3',
          '2014-05-25 07:34:23'
          )          

--确定目标表
Merge Into target_table t
--用编码匹配
using source_table s on t.code=s.code
--如果编码相同,则更新目标表的名称
When Matched and t.name<>s.name Then Update set t.name=s.name
--如果目标表中不存在,则从数据源插入目标表
When Not Matched By Target Then Insert (name,code,date) values (s.name,s.code,s.date)
--如果目标表的行在源表中不存在,则删除目标表的行
When Not Matched By Source Then DELETE
--输出所有操作的类型和数据
output $action as [action],inserted.*,DELETED.*;
--返回上个Merge语句影响的行数
select @@ROWCOUNT as Count1,ROWCOUNT_BIG() as Count2

http://blog.csdn.net/downmoon/article/details/5947360

5,top 接受参数,可以按照百分比取数,还可以用在update和delete上

;
SELECT TOP (@top) * FROM table
 PERCENT * FROM  table

6,拼接字符串

DECLARE @sql VARCHAR(max) = '';
SELECT   @sql=(@sql + filtersql + ' uinon ') FROM dbo.MyTable
)
exec @sql

7,CTE,也就是with as 实现递归

--这个例子是用来遍历树结构的,有两个方向,向上或向下:
--向下 : 找一个节点所有的子节点;向上 : 找一个节点的从它自己直到根节点的所有经过点,也就是路径
; --with 前边必须带有 ;
with resTb(iid,pid,name)--这是结果表,列名最好和原始表的列名区分一下
as
(
     --这是递归的起始节点
    union all
    select SrcTable.id,SrcTable.parentId,SrcTable.name from SrcTable
    inner join resTb on SrcTable.id = resTb.pid --这是向上,向下:SrcTable.parentId = resTb.iid
)

select * from     resTb -- 必须在最后使用这个表
    

CTE 可用于:

  • 创建递归查询。有关详细信息,请参阅使用公用表表达式的递归查询
  • 在不需要常规使用视图时替换视图,也就是说,不必将定义存储在元数据中。
  • 启用按从标量嵌套 select 语句派生的列进行分组,或者按不确定性函数或有外部访问的函数进行分组。
  • 在同一语句中多次引用生成的表。

使用 CTE 可以获得提高可读性和轻松维护复杂查询的优点。查询可以分为单独块、简单块、逻辑生成块。之后,这些简单块可用于生成更复杂的临时 CTE,直到生成最终结果集。可以在用户定义的例程(如函数、存储过程、触发器或视图)中定义 CTE。

公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE

Note:

一、CTE其实是面向对象的,运行的基础是CLR。一个很好的说明是With查询语句中是区分字段的大小写的。即"C_Code"和"c_Code"是不一样的,后者会报错。这与普通的SQL语句不同

二、 这个应用示例重在简化业务逻辑,即便是性能不佳,但对临时表\表变量\游标等传统处理方式是一种业务层次上的简化或者说是优化。

http://www.cnblogs.com/downmoon/archive/2009/10/23/1588405.html

少见的sql的更多相关文章

  1. SQL截取字符串

    SUBSTRING 返回字符.binary.text      或      image      表达式的一部分.有关可与该函数一起使用的有效      Microsoft®      SQL    ...

  2. sql 中单引号内嵌套单引号该怎么解决

    # 在mybatis 中写过一个比较少见的sql, 单引号呢需要嵌套一个单引号,使用双引号就会报错,怎么解决呢: * 这个时候可以使用两个单引号,eg : select id from pgr_dij ...

  3. 触发器运用示例---laobai

    1 触发器 概念:trigger.逻辑对象的一种.当dml的增删改语句执行时,自动触发一系列动作. 分类:dml触发器.ddl触发器(很少见) sql:ddl,dml,dcl 按触发的时间分: 语句执 ...

  4. 你还可以再诡异点吗——SQL日志文件不断增长

    前言 今天算是遇到了一个罕见的案例. SQL日志文件不断增长的各种实例不用多说,园子里有很多牛人有过介绍,如果我再阐述这些陈谷子芝麻,想必已会被无数次吐槽. 但这次我碰到的问题确实比较诡异,其解决方式 ...

  5. 深入浅出数据仓库中SQL性能优化之Hive篇

    转自:http://www.csdn.net/article/2015-01-13/2823530 一个Hive查询生成多个Map Reduce Job,一个Map Reduce Job又有Map,R ...

  6. 深入理解SQL注入绕过WAF和过滤机制

    知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...

  7. 理解和使用SQL Server中的并行

    许多有经验的数据库开发或者DBA都曾经头痛于并行查询计划,尤其在较老版本的数据库中(如sqlserver2000.oracle 7.mysql等).但是随着硬件的提升,尤其是多核处理器的提升,并行处理 ...

  8. SQL Server最近怎样了

    SQL Server最近怎样了 又到年终了,大家都作最后冲刺 最近园子里真的多了很多口水帖,无论大家争论得多么激烈,时间依然滴答滴答地过,争论完之后我们依然要继续埋头苦干 为年终奖.为明年做准备 这里 ...

  9. 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转)

    1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...

随机推荐

  1. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

  2. linux下用phpize给PHP动态添加扩展

    使用php的常见问题是编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,这里就需要用到phpize了. 如我想增加bcmath扩展的支持,这 ...

  3. register based 和 stack based虚拟机的区别

    其实其核心的差异,就是Dalvik 虚拟机架构是 register-based,与 Sun JDK 的 stack-based 不同,也就是架构上的差异.我先摘录几段网上可以找到的资料,重新整理和排版 ...

  4. 黑马程序员——OC语言Foundation框架 NSArray NSSet NSDictionary\NSMutableDictionary

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一) NSNumber 将各种基本数据类型包装成NSNumber对象 @ ...

  5. android 定时器AlarmManager

    1.android中通常是使用AlarmManager来定时启动一个单次或重复多次操作的.具体的说就是我们通过AlarmManager设定一个时间和注册一个intent到系统中,然后在该时间到来时,系 ...

  6. NSDate 时间比较...等

    http://blog.csdn.net/reylen/article/details/8560128 创建当前时间 NSDate *date = [NSDate date]; 从现在开始的24小时 ...

  7. 永不消逝的电波(二)HackRF入门:家用无线门铃信号重放

    0×00 前言 在第一篇文章:永不消逝的电波(一):无线电入门篇 我们了解了一下无线电的发展史以及无线电的一些物理知识,在第二篇里我们将用HackRF录制家用门铃的无线信号,然后重放门铃信号. 门铃从 ...

  8. 福州月赛2057 DFS

    题意:告诉你族谱,然后Q条查询s和t的关系,妈妈输出M,爸爸输出F: 题目地址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=78233# ...

  9. PHP正则表达式的快速学习方法

    1.入门简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,Perl或PHP脚本语言,以及awk或 ...

  10. 建立开发板与PC机之间的nfs服务器

    ARM开发板与PC通过NFS 网络文件系统挂接,很方便文件的移动,也为我们的开发带来了方便.接下来,我就详细的介绍下如何建立ARM与PC机的挂接. 我是用的UBuntu系统. 首先,我们需要在主机上安 ...