用SQL語句替代CURSOR

來源:互聯網
上載者:User

以前的以前,有個哥們給我說過cursor可以通過sql來進行替代,為什麼要替代,終歸是效能。無奈那個時候對sql理解有限,現在仍舊有限。但是至少自己還是終於把這個問題理解清楚了。

其實很簡單,看完這個例子,你就知道了。我在注視中寫明了幾個重要的效能指標。希望對您有所協助

Code
USE SQL441
GO

CREATE TABLE tbl_culsor2sql_pdt
(
    sn nvarchar(10) not null,
    lbl nvarchar(20) null
)
GO

CREATE TABLE tbl_culsor2sql_data
(
    sn nvarchar(10) not null,
    lbl nvarchar(20) null
)
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
******/

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.