gpt4 book ai didi

sql-server - 何时/为何在 SQL 中使用 QUOTENAME?

转载 作者:行者123 更新时间:2023-12-02 10:36:27 24 4
gpt4 key购买 nike

据我所知,QUOTENAME 函数可用于向字符串添加方括号([],默认行为)或其他字符包装器。它不适用于较长的字符串(超过 128 个字符)。

那么...为什么/什么时候你会使用它而不是更传统且更容易阅读的字符串连接?

为什么不直接在术语的开头和结尾连接单引号或方括号并使用此函数?

最佳答案

它是专门为引用列/表/数据库名称 - sysnames 而设计的。例如,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 是一种安全的方法,可以从可能不受信任的来源获取列名并将其用作系统名 - 无论当前/ future 的数据库设置如何,而不必担心边缘情况(例如输入中的 ] 或 ' )以及是否允许字符串突破列名以创建 SQL 注入(inject)攻击。我可能不会仅仅依赖此功能来确保安全,而是将其用于多层保护之一。

关于sql-server - 何时/为何在 SQL 中使用 QUOTENAME?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40616822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com