SQL语法提示工具SQL Prompt使用教程:使用SQL Prompt快速删除方括号
SQL Prompt根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读--当开发者不大熟悉脚本时尤其有用。SQL Prompt安装即可使用,能大幅提高编码效率。此外,用户还可根据需要进行自定义,使之以预想的方式工作。
如果在标识符中避免使用非法字符和保留字,则几乎不需要分隔符。遗憾的是,SSMS在生成构建脚本时会不加选择地使用方括号分隔符,以防万一。本文提供了一个方便的功能,该功能仅在真正需要的地方添加带引号的分隔符,然后坐下来,让SQL Prompt快速删除任何多余的方括号。
对于某些人来说,“SQL Prompt”菜单中更令人困惑的选项之一是“删除方括号”项。什么方括号,为什么要删除它们?他们的目的是什么,为什么是方形?这些都是好问题。
为什么要使用分隔符?
标识符,即SQL Server元数据的名称,例如对象、别名、列和索引,必须符合某些规则。如果没有,则必须定界它们。SQL标准指定使用双引号(“”)作为分隔符。SQL Server从Sybase继承了出于相同目的而使用方括号([])的喜好,尽管双引号也可以正常工作。分隔符不会成为标识符的一部分;它们仅用于标记其开始和结束,并且仅用于告知解析器您的意图。
您只需要很少分隔或“引用”标识符即可。SQL要求您分隔任何标识符,这些标识符是保留字,包含不允许的字符或以为特殊对象保留的符号开头。
SQL在标识符中仅允许某些字符。这些字符包括字母、十进制数字和一些符号。普通标识符必须以字母开头,并且只能包含字母、下划线字符(_)和数字。
- 字母由Unicode标准3.2定义,并且包括从a到z,从A到Z的拉丁字符以及从当前归类中得到的字母字符。
- 数字表示当前排序规则中的十进制数
- 允许的符号包括@(@),$(美元),#(数字)或_(下划线)。
分隔符为什么有问题?
没有经验的SQL Server开发人员会希望不必要地分隔标识符,并且会避免在名称中同时使用非法字符和保留字。但是,当您通过SSMS获取脚本时,SQL Server选择分隔所有标识符,无论它是否确实需要它。万一您使用的标识符将来可能成为保留字,它就会采用这种谨慎的方法。几乎所有开发人员都希望在可能的情况下删除它们,因为它们使SQL代码难以阅读。SQL Prompt提供了“删除方括号”操作,以纠正SQL Server脚本编写中的怪癖。
误使用带分隔符的标识符
如果您遵循对象命名规则,则几乎不需要分隔符,并且代码可能会更清晰。在下面的示例中,我允许我自己使用它们,只是为了指出您遇到麻烦或恶作剧的速度有多快。这段代码可以编译并运行而不会产生抱怨:
说服自己可以运行,但不是要继承的代码,请尝试使用“提示”的“删除方括号”操作(从“SQL Prompt”菜单或“操作”列表中,或使用键盘快捷键Ctrl + B,Crtl+ B)。它不能删除那些讨厌的方括号吗?如果确实如此,则该代码将无法运行。
但是,在SSMS中,将Person用脚本写出来。来自AdventureWorks的Person表,您将很快获得一个充满不必要方括号的构建脚本:
这次,当您运行“删除方括号”操作时,所有这些分隔符将消失,使其更加整洁并易于阅读。
引用版本如何?
不,什么也没有发生。SQL Prompt只对方括号感兴趣,而不对分隔标识符感兴趣。这很有用,因为这意味着您可以在真正需要的地方使用标准带引号的标识符,然后使用“提示”清理SSMS产生的所有方括号标识符。
为什么要担心引用标识符?
每当您生成需要获取元数据的SQL例程时,就需要准备好分隔表、列、类型、索引和对象的名称。我做了很多这样的事情,我不得不使用一些混乱或错误的系统例程。结果与SSMS相同;您最终不得不分隔一切。提供了系统过程sp_validname来检查标识符是否有效。不幸的是,它有一个“有效”的定义,这对我们来说毫无用处,因为它只会在标识符错误时才认为它是无效的,即使在分隔符也是如此。 仅当标识符为空、NULL或Unicode替换字符U + FFFF时,情况才会如此。 它甚至无法检查U + FFFF。
QuoteName()函数只是添加了方括号分隔符,如果字符串中已经有一个封闭的方括号字符,则将其“转义”。对此进行了简单演示,如下所示:
为了证明多余的右方括号只是“转义”字符串中的方括号,我们可以尝试使用此方括号表达式创建表:
正常工作:
我们甚至可以指定表名来删除它:
如果您要求SQL Prompt删除方括号,则在上面的代码中明智地将其保留。
更好的'QuoteName',仅在必要时用于分隔标识符当然,分隔的答案是设计一种检查标识符的方法,并且仅在必要时才对其进行分隔。 我想,我们应该具有可怜的sp_validname功能。尽管可以很容易地通过一个过程来完成它,但我还是将其作为一个函数来完成。 它可以接受两个参数@TheIdeintifier和@TheDelimiter,默认情况下,后者为双引号,尽管您可以将其设置为任何有效的分隔符。
当我直接从元数据创建脚本时可以使用它,然后可以执行该脚本。您永远无法确定从元数据视图中获得的名称将是有效的,因此您需要进行相应的检查和补偿。在您永远看不到代码的地方,那么值得用方括号“引用”所有内容。毕竟,如果它从未被发现过,那不会有任何危害。但是,对于任何可见的事物,都值得承担额外的麻烦。
结论
只要有可能,就应该避免使用不是有效SQL的标识符。这样,您可以避免任何误解或歧义。在极少数情况下,您可能需要在标识符(通常是别名)中引入一些无效字符。您可能需要在列名中进行操作,或者最好在列名中使用别名,以确保在报表中可以理解它们。然后,您需要分隔它们。
每当我们需要能够轻松查看和理解SQL时,就需要删除所有多余的不必要的分隔符。SQL Prompt具有出色的解决方案。通过为SSMS中的表生成脚本,然后运行“删除方括号”操作,您将很快说服自己。从方括号的装饰后面看到桌子的结构是非常令人满意的。
本教程内容到这里就结束了,感兴趣的朋友请继续关注我们网站哦~您也可以下载SQL Prompt试用版免费试用~想要购买SQL Prompt正版授权,或了解更多产品信息请点击