• TSQL糟糕的编码规范


    作为一名DBA,不免要与形形色色的TSQL代码打交道,看以下的三例:

    1:distinct 中乱用括号:

    SELECT DISTINCT (TransactionID),ProductID,TransactionType
    FROM adventureworks.Production.TransactionHistoryArchive

    与下面这句结果是一模一样,但上面这句可能使人迷糊,到底是 TransactionID去掉重复项,还是整个所有的列合在一起,去掉重复项呢!  规范的写法如下:

    SELECT DISTINCT TransactionID,ProductID,TransactionType
    FROM adventureworks.Production.TransactionHistoryArchive
     
     

    2:许多代码中定义字段,没有规定长度,先来看看表的定义:

    CREATE TABLE tab1 (col1 VARCHAR )
    
    INSERT INTO tab1 SELECT 'english'

    代码报错,没有插入成功!

    Msg 8152, Level 16, State 14, Line 1
    String or binary data would be truncated.
    The statement has been terminated.

    再来插入单个字符:

    INSERT INTO tab1 SELECT 'e'

    OK,说明定义表中没有规定长度,默认为1

    另外一种常见的情况是在使用cast,convert函数转换中:

    DECLARE @y varchar(100)='This article explains the different technologies that are available for scaling out'
    
    SELECT len(@y),len(cast(@y AS VARCHAR ))
     

    可以看看结果

    image

    默认的值是30个字符!所以为了代码的清晰可读,还是要带上长度

    3:在应该使用nvarchar的地方,也还是使用varchar

    DECLARE @name1 varchar(10)='中'
    DECLARE @name2 nvarchar(10)='中'
    SELECT datalength(@name1),DATALENGTH(@name2)
    image 
     

    可以看到这两者使用的字节数是一样的,而使用varchar(10)='中' 这个方式在SSIS中会产生莫名奇妙的问题,所以为了代码可读性好,还是要按照规范来做的!

            
  • 相关阅读:
    Mysql之锁、事务绝版详解干货!
    SSL基础知识(比较清楚)
    数字证书使用流程指南
    HTTPS与SSL
    IIS 6.0 Web园(Web Garden)
    验证数字可以有千分符可以有0个1个小数点小数点后输入后四舍五入保留两位(写个js验证真费劲)
    线程安全
    利用SSL给IIS加把锁(转)
    弹出div后其它不能操作(小技巧)
    关于反射
  • 原文地址:https://www.cnblogs.com/fly_zj/p/2637011.html
Copyright © 2020-2023  润新知