少见的sql
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的更多相关文章
- SQL截取字符串
SUBSTRING 返回字符.binary.text 或 image 表达式的一部分.有关可与该函数一起使用的有效 Microsoft® SQL ...
- sql 中单引号内嵌套单引号该怎么解决
# 在mybatis 中写过一个比较少见的sql, 单引号呢需要嵌套一个单引号,使用双引号就会报错,怎么解决呢: * 这个时候可以使用两个单引号,eg : select id from pgr_dij ...
- 触发器运用示例---laobai
1 触发器 概念:trigger.逻辑对象的一种.当dml的增删改语句执行时,自动触发一系列动作. 分类:dml触发器.ddl触发器(很少见) sql:ddl,dml,dcl 按触发的时间分: 语句执 ...
- 你还可以再诡异点吗——SQL日志文件不断增长
前言 今天算是遇到了一个罕见的案例. SQL日志文件不断增长的各种实例不用多说,园子里有很多牛人有过介绍,如果我再阐述这些陈谷子芝麻,想必已会被无数次吐槽. 但这次我碰到的问题确实比较诡异,其解决方式 ...
- 深入浅出数据仓库中SQL性能优化之Hive篇
转自:http://www.csdn.net/article/2015-01-13/2823530 一个Hive查询生成多个Map Reduce Job,一个Map Reduce Job又有Map,R ...
- 深入理解SQL注入绕过WAF和过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- 理解和使用SQL Server中的并行
许多有经验的数据库开发或者DBA都曾经头痛于并行查询计划,尤其在较老版本的数据库中(如sqlserver2000.oracle 7.mysql等).但是随着硬件的提升,尤其是多核处理器的提升,并行处理 ...
- SQL Server最近怎样了
SQL Server最近怎样了 又到年终了,大家都作最后冲刺 最近园子里真的多了很多口水帖,无论大家争论得多么激烈,时间依然滴答滴答地过,争论完之后我们依然要继续埋头苦干 为年终奖.为明年做准备 这里 ...
- 深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接(转)
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
随机推荐
- 2016.9.18 --- Shenyang ol
1001 Resident Evil 1002 List wants to travel 1003 hannnnah_j’s Biological Test 1004 Mathematician QS ...
- bzoj 2761: [JLOI2011]不重复数字
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #d ...
- HDU 1561 树形DP入门
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- app转让遇到的坑
家人共享的一部分 首先我们要符合app转让的一些基本规定,填写正确的信息去申请转让.(google会有很多正确的转让步骤),这里我就不多写出来了. 当接收到接受app的时候会出现一些想不到的问题. 其 ...
- RabbitMQ/JAVA 客户端测试(补:利用线程)
上次进行了简单的连接测试.这次主要进行一下小小的补充.利用线程将生产者消费者代码合到一个文件中. 我是将Recv.java(消费者)文件放在一个线程里添加到Send.java(生产者)中. 代码如下: ...
- HttpClient(4.3.3)实例讲解
HttpClient的作用强大,真的是十分强大. 本实例是基于v4.3.3写的,,作用是模拟登陆后进行上下班打卡,,,使用htmlparser进行解析返回的html文件 关于HttpClient的一些 ...
- H5实现俄罗斯方块(三)
最高分的面板: (function (window) { 'use strict'; function HighScore() { this.canvas = new Canvas('highscor ...
- 表单验证 jQuery Validate
http://www.runoob.com/jquery/jquery-plugin-validate.html http://www.cnblogs.com/linjiqin/p/3431835.h ...
- IOS ASIFormDataRequest使用简介(2/25)
ASIHTTPRequest类库中的ASIFormDataRequest是实现HTTP协议中的处理POST表单的很好的类库.使用起来非常简单.下面特酷吧简要总结其用法. 在说明之前先需要了解HTTP请 ...
- IIS32位,64位模式下切换
一.32位模式 1.cscript %systemdrive%\inetpub\adminscripts\adsutil.vbs set w3svc/appPools/enable32bitappon ...