T-SQL查詢:CTE,T-SQL:CTE

來源:互聯網
上載者:User

T-SQL查詢:CTE,T-SQL:CTE

之前在2本書看到過with as 子句的一個簡單例子,網上沒找到相關資料。

今天想起總結一下,主要說明如下:

【大表分批更新】

【大表分批刪除】

【完全重複的行只保留一行】


--建立測試表--DROP TABLE [tabName]SELECT * INTO [tabName] FROM sys.objectsSELECT * FROM [databaseName].[dbo].[tabName] ORDER BY name desc

------------------------------------------------------------------------------------------------------------------------------【大表分批更新】網頁需要升級的時候,資料庫需要增加欄位或者更新欄位值,對於大表將堵塞很久。一般先增加欄位允許為null值,再更新表中預設值,再添加約束比如要將測試表的principal_id更新為0,以下用最簡單的可行的方法更新:;WITH TAB AS(SELECT TOP 10 principal_id FROM [dbo].[tabName] where principal_id is null)update TAB set principal_id = 0要更新欄位principal_id就只取一個。每次選擇前10行更新null為0,可以建立定時作業更新。------------------------------------------------------------------------------------------------------------------------------【大表分批刪除】對於一些資料維護需要刪除較多的資料,而表較大並且很多使用者還在使用中。一般建立一個作業在晚上執行刪除,或者按某個欄位分段刪除。更方便的方法也可以選擇符合的條件刪除前N行;WITH TAB AS(SELECT TOP 10 principal_id FROM [dbo].[tabName] where principal_id is null)DELETE FROM TAB------------------------------------------------------------------------------------------------------------------------------【完全重複的行只保留一行】--插入使產生重複行INSERT INTO [tabName]SELECT TOP 50 PERCENT * FROM [databaseName].[dbo].[tabName]SELECT * FROM [databaseName].[dbo].[tabName] ORDER BY name desc網上使用最多的案例,都指定某列肯定是唯一的,以此來用一個語句刪除其他重複的。對於完全相同的行,都表示建立一個暫存資料表來過渡操作。以下使用“with 子句 和 ROW_NUMBER()函數”來實現刪除完全重複的其他行,partition分組時隨意選擇一列進行分組排序;WITH TAB AS(SELECT ROW_NUMBER()over(partition by object_id order by (select 0)) idFROM [dbo].[tabName])DELETE FROM TAB WHERE ID>1------------------------------------------------------------------------------------------------------------------------------






相關文章

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.