狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

DBA!你也能寫出優(yōu)雅的SQL腳本

admin
2011年5月4日 15:3 本文熱度 2916

本篇來聊聊如何書寫漂亮、整潔、優(yōu)雅的SQL腳本,下面這些是我個(gè)人總結(jié)、整理出來的。姑且做個(gè)拋磚引玉吧,呵呵,歡迎大家一起來討論。

我們首先來看看一段創(chuàng)建數(shù)據(jù)表的腳本(如下所示),你是否覺得有什么不妥或是不足呢?如果是你,你怎樣書寫呢?

  1. CREATE TABLE [dbo].[TableDataDictionary](  
  2.     [TableID] [int] IDENTITY(1,1) NOT NULL,  
  3.     [IpAddress] [nvarchar](15) NOT NULL,  
  4.     [DataBaseName] [nvarchar](35) NOT NULL,  
  5.     [TableName] [nvarchar](35) NOT NULL,  
  6.     [Description] [nvarchar](150) NULL,  
  7.  CONSTRAINT [PK_TableDataDictionary] PRIMARY KEY([Tableid])  

可能你也沒有覺得它有什么不妥,因?yàn)槟阋恢倍际沁@樣書寫哦。而且更混亂、更雜的的腳本你也見過,也可能習(xí)慣了;那么來看看下面的腳本,

  1. USE [Test];  
  2. GO  
  3.  
  4. IF OBJECT_ID(N'TableDataDictionary'IS NULL   
  5.     CREATE TABLE [dbo].[TableDataDictionary]  
  6.     (  
  7.         [TableID]            INT IDENTITY(1,1)  NOT NULL,  
  8.         [IpAddress]          NVARCHAR(15)       NOT NULL,  
  9.         [DataBaseName]       NVARCHAR(35)       NOT NULL,  
  10.         [TableName]          NVARCHAR(35)       NOT NULL,  
  11.         [Description]        NVARCHAR(150)      NULL,  
  12.         CONSTRAINT [PK_TableDataDictionary] PRIMARY KEY([Tableid])  
  13.     );  
  14. ELSE 
  15.     PRINT 'This table have been exist in database';  
  16. GO 

上面兩段腳本比起來,你是否覺得下面的更美觀、優(yōu)雅呢?

接下來我們來看看四段申明變量的腳本,自己可以對比

(一)

  1. DECLARE @PayType VARCHAR(50),  @Rate FLOAT, @FeeRate FLOAT ,@OtheFee FLOAT;  
  2. DECLARE @StartDate DATETIME,   @EndDate DATETIME;  
  3. DECLARE @CmdSql NVARCHAR(MAX);  
  4. DECLARE @MyCardBillFee FLOAT, @MyCardFee    FLOAT

---------------------------------------------------------------------------------------------------------

(二)

  1. DECLARE @PayType VARCHAR(50);  
  2. DECLARE @Rate FLOAT;  
  3. DECLARE @FeeRate FLOAT;  
  4. DECLARE @OtheFee FLOAT;  
  5. DECLARE @StartDate DATETIME;  
  6. DECLARE @EndDate DATETIME;  
  7. DECLARE @CmdSql NVARCHAR(MAX);  
  8. DECLARE @MyCardBillFee FLOAT;  
  9. DECLARE @MyCardFee    FLOAT

---------------------------------------------------------------------------------------------------------

(三)

  1. DECLARE @PayType         VARCHAR(50);              --支付類型  
  2. DECLARE @Rate            FLOAT;                    --匯率比例  
  3. DECLARE @FeeRate         FLOAT;                    --手續(xù)費(fèi)比例  
  4. DECLARE @MyCardFee       FLOAT;                    --......  
  5. DECLARE @OtheFee         FLOAT;                    --......  
  6. DECLARE @MyCardBillFee   FLOAT;                    --......  
  7. DECLARE @StartDate       DATETIME;                 --......  
  8. DECLARE @EndDate         DATETIME;                 --......  
  9. DECLARE @CmdSql          NVARCHAR(MAX);            --...... 

--------------------------------------------------------------------------------------------------------

(四)

  1. DECLARE   
  2.     @PayType         AS    VARCHAR(50);            --支付類型  
  3.     @Rate            AS    FLOAT;                  --匯率比例  
  4.     @FeeRate         AS    FLOAT;                  --手續(xù)費(fèi)比例  
  5.     @MyCardFee       AS    FLOAT;                  --......  
  6.     @OtheFee         AS    FLOAT;                  --......  
  7.     @MyCardBillFee   AS    FLOAT;                  --......  
  8.     @StartDate       AS    DATETIME;               --......  
  9.     @EndDate         AS    DATETIME;               --......  
  10.     @CmdSql          AS    NVARCHAR(MAX);          --...... 

-------------------------------------------------------------------------------------------------------

如果是你,你愿意運(yùn)用哪種書寫格式呢? 個(gè)人覺得(一)寫得極極糟糕,不僅閱讀不方便、而且也不方便注視。(二)則是我以前習(xí)慣書寫的格式,一來沒有注視、二來看起來沒有(三)、(四)美觀、大方。

存儲過程、函數(shù)頭部注視的樣式(個(gè)人曾今用過的樣式):

(一)

--======================================================================================

  1. --       Function         :            dbo.USP_GetEmployeById 按Id獲取雇員信息  
  2. --       Auhtor            :            Kerry  
  3. --       Create Date       :            2010-08-12  
  4. --       Description       :            詳細(xì)描述存儲過程功能(對Function 功能補(bǔ)充)、以及參數(shù)、輸出結(jié)果的描述 

--======================================================================================
--            2010-08-12        :           修改....增加........
--            2010-08-13        :            修改....增加.......
--=====================================================================================

Function  簡要描述存儲過程、函數(shù)功能。

Desctiption 詳細(xì)描述存儲過程、函數(shù)功能,以及參數(shù)、輸出結(jié)果描述

(二)

--======================================================================================

  1. --        Create Date            :        2010-08-11  
  2. --        Author                 :        Kerry  
  3. --        Modified Date          :        2010-08-12  
  4. --        Modified Content       :        修改表字段、增加匯率計(jì)算.....  
  5. --        Modified Date          :        2010-08-13  
  6. --        Modified Content       :        修改表字段、增加匯率計(jì)算.....  
  7. --        Description            :        計(jì)算搶車位社區(qū)游戲的月充值結(jié)構(gòu)信息。     

--=======================================================================================

(三)

  1. /**************************************************************************************************************  
  2.         Auhtor                 :            Kerry  
  3.         Create Date            :            2010-08-12  
  4.         Modified Date          :  
  5.         Modified Content       :  
  6.         Description            :            如何書寫漂亮、優(yōu)雅的SQL腳本  
  7. **************************************************************************************************************/ 

( 四)

  1. -- =============================================  
  2. -- Author:          
  3. -- Create date:   
  4. -- Description:      
  5. -- ============================================= 

使用MSSMS新建存儲過程,它自動生成的樣式

個(gè)人覺得(一) >= (二) > (三) > (四) ,不知道大家有沒有更好的格式推薦。

下面看看這樣一段腳本,一眼就覺得有點(diǎn)糟糕,其實(shí)實(shí)際開發(fā)中腳本比這個(gè)可能復(fù)雜得多,頭痛吧

  1. select PermissionID from  Permission where resourceid=  
  2. select top 1 resourceid from [Resource] where resourcename=@resourcename) and   
  3. actionid=(select top 1 actionid from [Actionwhere actionname=@actionname)  
  4. AND SchemaId in (SELECT SchemaId FROM dbo.BindToSchema WHERE DcUserID=@UserID)     

首先就應(yīng)該統(tǒng)一關(guān)鍵字大小寫,不要一部分大寫、一部分小寫。然后從結(jié)構(gòu)上面調(diào)整。 可能每個(gè)人的審美觀、習(xí)慣的格式不同,這個(gè)無所謂,也沒有必要統(tǒng)一。 但是你書寫出來的腳本至少要結(jié)構(gòu)清晰,一目了然。不要讓別人費(fèi)很大的勁去調(diào)整格式,然后才能理解它的邏輯,如果寫出上面或是比上面更糟糕的腳本,我想項(xiàng)目經(jīng)理真應(yīng)該教訓(xùn)教訓(xùn)你。這樣只會給后來維護(hù)的人痛苦不堪(實(shí)際開發(fā)中可能比這糟糕十倍呢,想必很多人是深受其害啊)

  1. SELECT Permission FROM  Permission  
  2.  WHERE   
  3.      resourceid =( SELECT TOP 1 resourceid FROM [Resource] WHERE resourcename=@resourcename)   
  4.     AND actionid =(SELECT TOP 1 actionid FROM [ActionWHERE actionname=@actionname)  
  5.     AND SchemaId IN (SELECT SchemaId FROM dbo.DcUserBindToSchema WHERE DcUserID=@UserID) 

動態(tài)組合語句是否讓你的腳本看起來林亂不堪啊,你有沒有試過讓其在某些方面看起來美觀點(diǎn)、優(yōu)雅點(diǎn)啊、

  1. 'SELECT   Order_ID = @OrderID, CampaignCode= @CampaignCode, ProductCode = @ProductCode, StartDate= SpotDate,    
  2.    EndDate = EndDate, StartTime= Media_StartTime, EndTime = Media_EndTime, Duration = (CASE WHEN Media_Duration IS NULL OR   ELSE Media_Duration END), Adformat= Media_Adformat , Color = Media_Color , --Media_Showing,                                          Size   = Media_Size, SpotType  = Media_SpotType, URL = Media_URL  , ScheduleNo   = ScheduleNo ,   
  3.    Plan_Insertion_ID  = Plan_Insertion_ID  

那下面書寫格式是不是美觀、整潔些呢

  1. SELECT     
  2.   Order_ID          = @OrderID    
  3. , CampaignCode      = @CampaignCode    
  4. , ProductCode       = @ProductCode    
  5. , StartDate         = SpotDate    
  6. , EndDate           = EndDate    
  7. , StartTime         = Media_StartTime    
  8. , EndTime           = Media_EndTime     
  9. , Adformat          = Media_Adformat                                         
  10. , Color             = Media_Color    
  11. , Impression        = Media_Impression                                       
  12. , Location          = Media_Location                                         
  13. , Material          = Media_Material                                         
  14. , Position          = Media_Position                                         
  15. , Program           = Media_Program                                          
  16. , Scale             = Media_Scale         --Media_Showing                                          
  17. Size              = Media_Size                                             
  18. , SpotType          = Media_SpotType                                      
  19. , URL               = Media_URL    
  20. , ScheduleNo        = ScheduleNo    
  21. , Plan_Insertion_ID = Plan_Insertion_ID    
  22. , Position = Media_Position  

怎么樣是否覺得下面的”清新脫俗“,眼前一亮啊,呵呵,不是在說美女啊。看看我以前一個(gè)同事寫的吧,我只截取了一部分。

寫著覺得有點(diǎn)天馬行空、不著邊際了,其實(shí)這個(gè)話題有點(diǎn)大,而且和個(gè)人習(xí)慣、審美觀有莫大聯(lián)系,所謂眾口難調(diào),不過有幾點(diǎn)應(yīng)該是一致的:

1:書寫腳本的時(shí)候,多用空格、Tab鍵,不要讓代碼擁擠,雜糅在一起。

2:讓代碼看起來覺得舒服,一目了然,不要一看就覺得頭痛,要細(xì)細(xì)看上好久,才了解邏輯結(jié)構(gòu)

3:讓代碼看起來整潔、優(yōu)美。凌亂不堪是大忌。

4:總結(jié)、學(xué)習(xí)一些書寫漂亮的格式。

限于篇幅,下面給出一些我見過的、寫的比較優(yōu)雅的腳本,大家也可以貼出自己寫得優(yōu)美的代碼,一起學(xué)習(xí)探討。、

  1. -- Construct column list  
  2. SET @sql =  
  3.   N'SET @result = '                                    + @newline +  
  4.   N'  STUFF('                                          + @newline +  
  5.   N'    (SELECT N'','' + ' 
  6.            + N'QUOTENAME(pivot_col) AS [text()]'       + @newline +  
  7.   N'     FROM (SELECT DISTINCT(' 
  8.            + @on_cols + N') AS pivot_col'              + @newline +  
  9.   N'           FROM' + @query + N') AS DistinctCols'   + @newline +  
  10.   N'     ORDER BY pivot_col'                           + @newline +  
  11.   N'     FOR XML PATH('''')),'                         + @newline +  
  12.   N'    1, 1, N'''');' 
  13.  
  14. EXEC sp_executesql  
  15.   @stmt   = @sql,  
  16.   @params = N'@result AS NVARCHAR(MAX) OUTPUT',  
  17.   @result = @cols OUTPUT;  
  18.  
  19. -- Create the PIVOT query  
  20. SET @sql =  
  21.   N'SELECT *'                                           + @newline +  
  22.   N'FROM'                                               + @newline +  
  23.   N'  ( SELECT '                                        + @newline +  
  24.   N'      ' + @on_rows + N','                           + @newline +  
  25.   N'      ' + @on_cols + N' AS pivot_col,'              + @newline +  
  26.   N'      ' + @agg_col + N' AS agg_col'                 + @newline +  
  27.   N'    FROM '                                          + @newline +  
  28.   N'      ' + @query                                    + @newline +  
  29.   N'  ) AS PivotInput'                                  + @newline +  
  30.   N'  PIVOT'                                            + @newline +  
  31.   N'    ( ' + @agg_func + N'(agg_col)'                  + @newline +  
  32.   N'      FOR pivot_col'                                + @newline +  
  33.   N'        IN(' + @cols + N')'                         + @newline +  
  34.   N'    ) AS PivotOutput;' 

代碼

  1. DECLARE 
  2.   @schemaname AS NVARCHAR(128),  
  3.   @tablename  AS NVARCHAR(128),  
  4.   @colname    AS NVARCHAR(128),  
  5.   @sql        AS NVARCHAR(805);  
  6.  
  7. SET @schemaname = N'dbo';  
  8. SET @tablename  = N'Orders';  
  9. SET @colname    = N'CustomerID';  
  10. SET @sql = N'SELECT COUNT(DISTINCT ' 
  11.   + QUOTENAME(@colname) + N') FROM ' 
  12.   + QUOTENAME(@schemaname)  
  13.   + N'.' 
  14.   + QUOTENAME(@tablename)  
  15.   + N';';  
  16.  
  17. EXEC(@sql); 

原文標(biāo)題:如何書寫優(yōu)雅、漂亮的SQL腳本?

鏈接:http://www.cnblogs.com/kerrycode/archive/2010/08/16/1800334.html


該文章在 2011/5/4 15:04:24 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved