博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用SQL语句替代CURSOR
阅读量:7042 次
发布时间:2019-06-28

本文共 1805 字,大约阅读时间需要 6 分钟。

以前的以前,有个哥们给我说过cursor可以通过sql来进行替代,为什么要替代,终归是性能。无奈那个时候对sql理解有限,现在仍旧有限。但是至少自己还是终于把这个问题理解清楚了。

其实很简单,看完这个例子,你就知道了。我在注视中写明了几个重要的性能指标。希望对您有所帮助

ContractedBlock.gif
ExpandedBlockStart.gif
Code
USE SQL441
GO
CREATE TABLE tbl_culsor2sql_pdt
(
    sn 
nvarchar(10not null,
    lbl 
nvarchar(20null
)
GO
CREATE TABLE tbl_culsor2sql_data
(
    sn 
nvarchar(10not null,
    lbl 
nvarchar(20null
)
GO
INSERT INTO tbl_culsor2sql_pdt
VALUES('1Q2A3A4Z',NULL)
INSERT INTO tbl_culsor2sql_pdt
VALUES('4F5D6R4F',NULL)
INSERT INTO tbl_culsor2sql_pdt
VALUES('9S9X3J7D',NULL)
INSERT INTO tbl_culsor2sql_pdt
VALUES('0X9D8K9X',NULL)
GO
INSERT INTO tbl_culsor2sql_data
VALUES('1Q2A3A4Z','CNDTD7550000001')
INSERT INTO tbl_culsor2sql_data
VALUES('4F5D6R4F','CNDTD7550000002')
INSERT INTO tbl_culsor2sql_data
VALUES('9S9X3J7D','CNDTD7550000003')
INSERT INTO tbl_culsor2sql_data
VALUES('0X9D8K9X','CNDTD7550000004')
GO
SELECT sn,lbl FROM tbl_culsor2sql_pdt
GO
SELECT sn,lbl FROM tbl_culsor2sql_data
GO
/****** Cursor ******/
UPDATE tbl_culsor2sql_pdt SET lbl = NULL
-- Declare a cursor
DECLARE custom_cursor CURSOR
 
FOR    SELECT sn, lbl FROM tbl_culsor2sql_data
-- declare a temporary various
DECLARE @sn varchar(10)
DECLARE @lbl varchar(20)
-- open the cursor
OPEN custom_cursor
--GET THE NEXT RECORD
FETCH NEXT FROM custom_cursor INTO @sn , @lbl
-- GET SUCCESSFULLY
WHILE @@FETCH_STATUS = 0
BEGIN 
    
UPDATE tbl_culsor2sql_pdt
    
SET lbl = @lbl
    
WHERE SN = @sn
    
FETCH NEXT FROM custom_cursor INTO @sn@lbl
END
--DELETE THE CURSOR
DEALLOCATE custom_cursor 
/****** 
10 query plan
5 table scan
5 table update
5 cluster index insert on tempdb
*****
*/
/****** SQL ******/
UPDATE tbl_culsor2sql_pdt SET lbl = NULL
GO
UPDATE tbl_culsor2sql_pdt
SET lbl = DATA.lbl
FROM tbl_culsor2sql_pdt AS PDT
INNER JOIN tbl_culsor2sql_data AS DATA
ON PDT.sn = DATA.sn
/****** 
1 query plan
2 table scan
1 table update
*****
*/

 

 

转载地址:http://twhal.baihongyu.com/

你可能感兴趣的文章
Longest Increasing Path in a Matrix
查看>>
直击微信公开课:2019年小程序将会有哪些改变?
查看>>
一个沉重的问题:软件开发到底还有价值吗?
查看>>
13岁女孩因发布JavaScript无限循环代码被捕
查看>>
Yelp开源数据管道项目最新组件——数据管道客户端库
查看>>
Coinbase是如何在其加密货币交易平台上应对扩展性挑战的
查看>>
Elixir:可能成为下一代Web开发语言
查看>>
苹果Q1财报出炉:手机收入下滑15%,服务收入增长19%
查看>>
Racket 6.7最新版本:提供对Android App的支持及改进的REPL等等
查看>>
Eclipse发布MicroProfile 1.4和2.0
查看>>
Kubernetes日志分析利器:Elassandra部署使用指南
查看>>
TOP 13大最热开源微服务Java框架
查看>>
Swift 3来了!
查看>>
京东构建了全球最大的Kubernetes集群,没有之一
查看>>
Node项目之需求收集平台(一)- 基本介绍
查看>>
ArchSummit北京2015 | “新人”的技术约战
查看>>
Microsoft宣布正式发布Linux on ASE
查看>>
Elm提供的语言级响应性
查看>>
微服务通信策略
查看>>
InfoQ 趋势报告:技术文化\u0026方法2019年实践状况
查看>>