• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MsSql > SqlServer 2005 T-SQL Query 学习笔记(4)

SqlServer 2005 T-SQL Query 学习笔记(4)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了SqlServer 2005 T-SQL Query 学习笔记(4)等相关知识,希望本文的分享对您有所帮助
比如,我要建立一个1,000,000行的数字表:

CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 1000000;
SET @rc = 1;

INSERT INTO Nums VALUES(1);
WHILE @rc * 2 <= @max
BEGIN
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
SET @rc = @rc * 2;
END

INSERT INTO dbo.Nums
SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;




这种方式非常巧妙,它并不是一个一个的循环插入,而是一次插入很多行,{1},{2},{3,4},{5,6,7,8}。。。



为什么这样会快呢?

是因为它节省了跟比较其他可用解决方案进行比较和记录这些日志的时间。



然后,作者给了一个CTE的递归的解决方案:

DECLARE @n AS BIGINT;
SET @n = 1000000;

WITH Nums AS
(
SELECT 1 AS n
UNION ALL
SELECT n + 1 FROM Nums WHERE n < @n
)
SELECT n FROM Nums
OPTION(MAXRECURSION 0);--为了移除默认100的递归限制


有个更优的CTE的解决方案,就是先生成很多行,然后用ROW_NUMBER进行计算,再选择ROW_NUMBER这列的值就可以了。

</div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-11SQLServer分布式事务问题
  • 2017-05-11收缩数据库日志文件的方法(仅适用于mssql2005)
  • 2017-05-11SqlServer 2005中使用row_number()在一个查询中删除重复记录
  • 2017-05-11SqlServer2008误操作数据(delete或者update)后恢复数据的方法
  • 2017-08-28SQL Server 2008 R2 企业版/开发版/标准版(中英文下载,带序列号)
  • 2017-05-11sql server 2005中使用with实现递归的方法
  • 2017-05-11在SQLServer 2005中编写存储过程
  • 2017-05-11SQL Server 2005与sql 2000之间的数据转换方法
  • 2017-05-11一步一步教你创建SQL 2005计划任务应用图解教程
  • 2017-05-11sql2005创建远程登录帐户的sql语句

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • SQLServer 2008 新增T-SQL 简写语法
    • SQL Server创建维护计划失败(SQL Server:14234 错误)的解决方法
    • sqlserver2008自动发送邮件
    • 基于SQL2005 SQL2008 表结构信息查询升级版的详解(含外键信息)
    • sql2008安装教程 SQL Server 2008 R2 安装图解
    • sql2005 批量更新问题的解决方法
    • Sqlserver 2005使用XML一次更新多条记录的方法
    • sql2005 远程连接问题解决方法
    • 关于sqlserver 2005 使用临时表的问题( Invalid object name #temptb)
    • SQLServer 2008中SQL增强之一:Values新用途

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有