您何时/为什么要使用QUOTENAME?

学习阅读

我知道QUOTENAME函数可用于添加方括号(默认行为)或其他一些字符包装。QUOTENAME不适用于较长的字符串(超过128个字符)。所以我的问题是,为什么/时,你会使用它,而不是更传统的和更容易阅读的字符串连接。为什么不只在术语的开头和结尾处连接单引号或方括号,而使用此函数呢?

罗伯特·麦基

它是专门为引用列/表/数据库名称(系统名称)而设计的。例如,这样的:SELECT QUOTENAME('abc[]def')返回[abc[]]def]SELECT '[' + 'abc[]def' + ']'返回[abc[]def]其是无效的作为列/表/数据库的名称使用。

此外,SQL-99标准是使用单引号字符引用,并在SQL Server的当前版本继续使用括号,它可能在未来(或者是可配置的是)使用SQL-99标准。在这种情况下,所有使用QUOTENAME的代码将继续正常运行,而尝试自行转义的代码将失败。

还有更细微的含义。由于QUOTENAME具有与sysname完全相同的限制,因此Microsoft是否应该决定将sysname更改为长于128个字符(也许是256个?也许是32767个?),因此可以假定QUOTENAME然后也能够处理这些增加的大小。使用QUOTENAME是从可能不受信任的来源中获取列名并将其用作sysname的安全方法,无论当前/将来的数据库设置如何,都不必担心输入中的边缘情况(例如]或' ),以及是否允许字符串突破列名以创建SQL注入攻击。我可能不会仅依靠此功能来获得安全性,而是将其用于许多保护层中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章