天道酬勤,学无止境

SQL Prompt

SQL Prompt教程:旧式联接语法(ST001)

SQL Prompt是一款实用的SQL语法提示工具。SQL Prompt根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读--当开发者不大熟悉脚本时尤其有用。SQL Prompt安装即可使用,能大幅提高编码效率。此外,用户还可根据需要进行自定义,使之以预想的方式工作。使用旧式联接语法没有任何优势。如果SQL提示标识了它在旧版代码中的使用,则重写语句以使用ANSI标准的连接语法将简化和改进代码。SQL Prompt实现了一个静态代码分析规则ST001,该规则将在开发和测试工作期间自动检查代码是否出现非ANSI标准的JOIN语法。SQL的“旧样式” Microsoft / Sybase JOIN样式已使用= *和* =语法,已弃用,不再使用。当数据库引擎级别为10(SQL Server 2008)或更高版本(兼容级别100)时,使用此语法的查询将失败。ANSI-89表引用列表(FROM表A,表B)仍然仅是INNER JOIN的ISO标准。这些样式都不值得使用。自ANSI SQL-92发布以来,就一直最好指定所需的连接类型:INNER,LEFT OUTER,RIGHT OUTER,FULL OUTER和CROSS。尽管可以选择任何受支持的JOIN样式,而不会影响SQL Server使用的查询计划

2021-03-27 01:29:20    分类:博客    SQL Prompt   sql

为什么不要创建将ANSI_PADDING设置为OFF的列?

SQL Prompt是一款实用的SQL语法提示工具。它根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读--当开发者不大熟悉脚本时尤其有用。本文介绍了不要创建将ANSI_PADDING设置为OFF的列。查找永久更改表中某些数据类型检索方式的连接设置,这有点奇怪,但是如果在创建临时或永久表时使用SET ANSI_PADDING OFF,就会发生这种情况。在创建表时,由于设置不当,或者偶然使用带有DBLib连接的旧应用程序,这会导致表中的某些列从那时起奇怪地或不一致地处理某些字符串或二进制数据类型的尾随空格。此选项已被弃用,在某些时候,它将被删除(它将始终为“on”)。SQL Prompt具有不赞成使用的语法规则DEP013,它将警告您使用此选项以及其他不赞成使用的SET选项。什么是ANSI填充?为什么?在SQL的早期,如何处理字符串的问题引起了争议。定义和固定字符串长度的CHAR数据类型旨在使数据检索简单而有效。字符串以指定的长度存储在CHAR数据类型中。对于较短的字符串,数据类型中所有剩余的字符位置都用空格(CHAR)或零(BINARY)填充。这些填充空格是字符串的一部分吗?如果不是,您如何区分故意填充空格的值和自动填充的值?SQL的早期实现通常在检索数据时修剪掉CHAR中的所有尾随空格,除非该列是NOT NULL。但是,很明显

2021-03-27 00:04:44    分类:博客    SQL Prompt   sql   语法提示

使用Float或Real数据类型的危险

SQL Prompt根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读--当开发者不大熟悉脚本时尤其有用。SQL Prompt安装即可使用,能大幅提高编码效率。本文介绍了使用Float或Real数据类型的危险。浮点数据类型可容纳非常大的数字,但是缺少了精度。它们对于某些类型的科学计算很方便,但是在更广泛地使用时很危险,因为它们会引入较大的舍入误差。浮点运算就是为了避免计算中的溢出错误而容忍和管理近似。在现实世界中,我们通常关心数字的准确性,而会牺牲空间和资源以避免溢出。科学是在误差范围内工作的,而精确在商业会计中至关重要。当我还是一名初级程序员时,我曾经写过一种我认为是银行计算交易利润非常合适的方法。在一百万英镑中,最多也就一两便士的误差,我很满意。它使用了我们当时用来开发财务软件包的PL / 1编译器中固有的计算。我向他们展示了精心制作的应用程序,他们感到震惊。冷酷无情的银行家们毫不留情地表示一百万英镑没了几分钱。他们不会接受的。我被迫用精确的汇编代码编写一个精确的二进制编码的十进制(BCD)程序包。SQL Prompt具有代码分析规则(BP023),该规则将提醒您使用Float或Real数据类型,这是因为它们可能会引入许多组织通常在其SQL Server数据上常规执行的那种计算方式

2021-03-27 00:03:46    分类:博客    SQL Prompt   数据库   SQL Server