sql server Quotename的问题
发布网友
发布时间:2022-05-01 13:31
我来回答
共5个回答
懂视网
时间:2022-05-01 17:52
@tbname varchar(256),@sql varchar(256)
set @tbname=‘index‘
---查这个表里的数据:
print(@tbname)
set @sql = ‘select * from ‘+QUOTENAME(@tbname)
print(@sql)
exec(@sql)
SQL2008关于quotename的用法
标签:dex div style rom span arc sql blog 数据
热心网友
时间:2022-05-01 15:00
QUOTENAME (Transact-SQL):返回带有分隔符的 Unicode 字符串,分隔符的加入可使输入的字符串成为有效的 SQL Server 分隔标识符。
适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。
语法: QUOTENAME ( 'character_string' [ , 'quote_character' ] )
参数
'character_string'
Unicode 字符数据构成的字符串。 character_string 是 sysname 值,并且不得超过 128 个字符。 超过 128 个字符的输入将返回 NULL。
'quote_character'
用作分隔符的单字符字符串。 可以是单引号 (')、左方括号或右方括号 ([]) 或者英文双引号 (")。 如果未指定 quote_character,则使用方括号。
返回类型:nvarchar(258)
示例
以下示例接受字符串 abc[]def 并使用 [ 和 ] 字符来创建有效的 SQL Server 分隔标识符。
SELECT QUOTENAME('abc[]def');
下面是结果集:
[abc[]]def]
(1 row(s) affected)
请注意,字符串 abc[]def 中的右方括号有两个,用于指示转义符。
结果中,第一个 "]"的意思是告诉系统,第二个"]"是数据的一部分而不是分隔符,第三个也就是最后一个"]"才是分隔符。就好比SQL的一个字符串中,如果你的字符串里面有单引号,则需要转义,也就是 '这是一个''用于显示的单引号',这里中间的两个单引号跟例子里面的两个反中括号效果一样
热心网友
时间:2022-05-01 16:18
select quotename('abc[aa]def') 默认【】 为什么有】二个。是要区分
select quotename('abc[aa]def','"') ,自己加一个分割
--函数QUOTENAME
--功能:返回带有分隔符的Unicode 字符串,分隔符的加入可使输入的字符串成为有效的Microsoft SQL Server 2005 分隔标识符。
--语法
QUOTENAME ( 'character_string' [ , 'quote_character' ] )
--举例说明:
--比如你有一个表,名字叫index
--你有一个动态查询,参数是表名
declare @tbname varchar(256)
set @tbname='index'
---查这个表里的数据:
print('select * from '+@tbname)
exec('select * from '+@tbname)
--这样print出来的数据是
select * from index
--因为index是字键字,肯定出错,加上括号就可以了:
select * from [index]
--这便有了QUOTENAME,即:
print('select * from '+QUOTENAME(@tbname))
--结果:select * from [index]
exec('select * from '+QUOTENAME(@tbname))
--结论
/*
初步理解为解决有些对象是SQLSERVER关键字的情况,即用该函数规范对象名,以便程序顺利运行
*/
热心网友
时间:2022-05-01 17:53
这主要用于转义访注入
比如:
Quotename(内容,'''')--生成字符'内容'
Quotename(内容)--生成字符[内容]
参照例子
https://technet.microsoft.com/zh-cn/library/ms161953(v=sql.105).aspx
热心网友
时间:2022-05-01 19:44
我执行出来是 [abc[aa]]def]