首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >幂等QUOTENAME()?

幂等QUOTENAME()?
EN

Stack Overflow用户
提问于 2018-03-05 17:22:54
回答 1查看 71关注 0票数 1

sql中的QUOTENAME()函数用于构建动态sql以处理名称中的“特殊”字符。如果通过嵌套代码结束冗余调用,它就会分崩离析。

代码语言:javascript
复制
declare @name sysname = 'simple_name'
print '@name:    ' + @name
print 'QUOTENAME(@name):        ' + QUOTENAME(@name)
print 'QUOTENAME(QUOTENAME(@name)): ' + QUOTENAME(QUOTENAME(@name))

结果

@名称: simple_name QUOTENAME(@name):simple_name QUOTENAME(@name):[simple_name]

除了确保这种链式调用在代码库中是不可能的之外,是否有任何一个幂等式的调用版本即使对于嵌套调用也是安全的?

EN

回答 1

Stack Overflow用户

发布于 2018-03-05 18:29:45

我对regex不太了解,但我可以想象您可以在执行层之前执行某种@sql磨擦。

我确信某种正则表达式会更快,但这是我的测试。

代码语言:javascript
复制
DECLARE @name sysname = 'simple_name'
DECLARE @SQLTest nvarchar(max)

SET @SQLTest = 'select QUOTENAME(QUOTENAME(@name)), ''blah'', ''blah'''

SET @SQLTest = Replace(@SQLTest, Substring(@SQLTest, PatIndex('%QUOTENAME(QUOTENAME(%))%', @SQLTest), 20), 'QUOTENAME(')


SET @SQLTest = Replace(@SQLTest, Substring(@SQLTest, PatIndex('%))%', @SQLTest), 2), ')')

-这可能是更安全的第二次替换?

代码语言:javascript
复制
SET @SQLTest = Replace(@SQLTest, Substring(reverse(@SQLTest), PatIndex('%))%EMANETOUQ%', reverse(@SQLTest)), 2), ')')

-

代码语言:javascript
复制
select @SQLTest

exec sp_executesql @SQLTest, N'@name sysname', @name
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49116111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档