比如,我要建立一个1,,行的数字表: CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY); DECLARE @max AS INT, @rc AS INT; SET @max = ; 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 = ; WITH Nums AS ( SELECT 1 AS n UNION ALL SELECT n + 1 FROM Nums WHERE n < @n ) SELECT n FROM Nums OPTION(MAXRECURSION 0);--为了移除默认的递归限制 有个更优的CTE的解决方案,就是先生成很多行,然后用ROW_NUMBER进行计算,再选择ROW_NUMBER这列的值就可以了。 利用笛卡尔积进行不断的累加,达到了n行。 最后,作者给出了一个函数,用于生成这样的数字表:
推荐整理分享SqlServer 2005 T-SQL Query 学习笔记(4),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!
SQLserver 文件和文件组的作用说明 1、文件和文件组的含义与关系每个数据库有一个主数据文件.和若干个从文件。文件是数据库的物理体现。文件组可以包括分布在多个逻辑分区的文件,
sql 批量更新问题的解决方法 首先注意Statement和PreparedStatement的问题Statementsm=cn.createStatement();sm.addBatch(sql1);sm.addBatch(sql2);...sm.executeBatch()用Statement的好处就是每次可以直接传一个SQL语
一步一步教你创建SQL 计划任务应用图解教程 使用sql的计划任务可以处理一些特殊环境的数据,除了使用windows系统的计划任务来定时处理,不过要配合程序才行,有些事情可以直接使用sql本身的计