如何书写优雅、漂亮的SQL脚本?

发表于:2012-5-28 10:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:潇湘隐者    来源:51Testing软件测试网采编

  本篇来聊聊如何书写漂亮、整洁、优雅的SQL脚本,下面这些是我个人总结、整理出来的。姑且做个抛砖引玉吧,呵呵,欢迎大家一起来讨论。

  我们首先来看看一段创建数据表的脚本(如下所示),你是否觉得有什么不妥或是不足呢?如果是你,你怎样书写呢?

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->CREATE TABLE [dbo].[TableDataDictionary](
    [TableID] [int] IDENTITY(1,1) NOT NULL,
    [IpAddress] [nvarchar](15) NOT NULL,
    [DataBaseName] [nvarchar](35) NOT NULL,
    [TableName] [nvarchar](35) NOT NULL,
    [Description] [nvarchar](150) NULL,
 CONSTRAINT [PK_TableDataDictionary] PRIMARY KEY([Tableid])
)

  可能你也没有觉得它有什么不妥,因为你一直都是这样书写哦。而且更混乱、更杂的的脚本你也见过,也可能习惯了;那么来看看下面的脚本,

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->USE [Test];
GO

IF OBJECT_ID(N'TableDataDictionary') IS NULL
    CREATE TABLE [dbo].[TableDataDictionary]
    (
        [TableID]            INT IDENTITY(1,1)  NOT NULL,
        [IpAddress]          NVARCHAR(15)       NOT NULL,
        [DataBaseName]       NVARCHAR(35)       NOT NULL,
        [TableName]          NVARCHAR(35)       NOT NULL,
        [Description]        NVARCHAR(150)      NULL,
        CONSTRAINT [PK_TableDataDictionary] PRIMARY KEY([Tableid])
    );
ELSE
    PRINT 'This table have been exist in database';
GO

  上面两段脚本比起来,你是否觉得下面的更美观、优雅呢?

  接下来我们来看看四段申明变量的脚本,自己可以对比

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->           (一)
DECLARE @PayType VARCHAR(50),  @Rate FLOAT, @FeeRate FLOAT ,@OtheFee FLOAT;
DECLARE @StartDate DATETIME,   @EndDate DATETIME;
DECLARE @CmdSql NVARCHAR(MAX);
DECLARE @MyCardBillFee FLOAT, @MyCardFee    FLOAT;
---------------------------------------------------------------------------------------------------------

                                (二)
DECLARE @PayType VARCHAR(50);
DECLARE @Rate FLOAT;
DECLARE @FeeRate FLOAT;
DECLARE @OtheFee FLOAT;
DECLARE @StartDate DATETIME;
DECLARE @EndDate DATETIME;
DECLARE @CmdSql NVARCHAR(MAX);
DECLARE @MyCardBillFee FLOAT;
DECLARE @MyCardFee    FLOAT;
---------------------------------------------------------------------------------------------------------
                           
                            (三)

DECLARE @PayType         VARCHAR(50);              --支付类型
DECLARE @Rate            FLOAT;                    --汇率比例
DECLARE @FeeRate         FLOAT;                    --手续费比例
DECLARE @MyCardFee       FLOAT;                    --......
DECLARE @OtheFee         FLOAT;                    --......
DECLARE @MyCardBillFee   FLOAT;                    --......
DECLARE @StartDate       DATETIME;                 --......
DECLARE @EndDate         DATETIME;                 --......
DECLARE @CmdSql          NVARCHAR(MAX);            --......
---------------------------------------------------------------------------------------------------------

                          (四)
DECLARE
    @PayType         AS    VARCHAR(50);            --支付类型
    @Rate            AS    FLOAT;                  --汇率比例
    @FeeRate         AS    FLOAT;                  --手续费比例
    @MyCardFee       AS    FLOAT;                  --......
    @OtheFee         AS    FLOAT;                  --......
    @MyCardBillFee   AS    FLOAT;                  --......
    @StartDate       AS    DATETIME;               --......
    @EndDate         AS    DATETIME;               --......
    @CmdSql          AS    NVARCHAR(MAX);          --......
-------------------------------------------------------------------------------------------------------

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号