SQL 分号转义问题

cvbcvb 2017-09-15 05:49:48
例子:
正常语句:select top 10 area,positionname from station
执行字符串语句:

Declare @areaName varchar(50)='area' ,@tableName varchar(50)='station'
exec('
select top 10 '+@areaName+',positionname from '+@tableName+'
')

问题:
如何理解加号+前的分号‘,我知道是用来转义,但不清楚转义哪一个符号
比如:例子一中的'+@areaName+' 把值代入是 ‘+ area+’ 还是 ‘+ ‘area‘+’
加号前面的分号’是用来转义+号?还是转义加号里面的分号’
...全文
1073 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
acen_chen 2017-09-19
  • 打赏
  • 举报
回复
拼接sql而已。。。。
道素 2017-09-18
  • 打赏
  • 举报
回复

exec('
select top 10 '+@areaName+',positionname from '+@tableName+'
')
你这样看,加号就是连接字符串,程序执行时会用变量的值替换变量:

'select top 10 '(第一个字符串常量) +@areaName(第二部分字符串变量)+',positionname from '(第三部分字符串常量)+@tableName(第四部分变量)+''(第五部分)

所以这里的单引号就是将字符串常量括起来
二月十六 2017-09-15
  • 打赏
  • 举报
回复
这个引号不是用来转义的,这个引号是用来拼接字符串用的,是把字符拼接到一起,那个+也是拼接用的,带入的只是变量的值,和这些符号没有关系,楼主可以把exec换成print试试
Declare @areaName varchar(50)='area' ,@tableName varchar(50)='station'
print('
select top 10 '+@areaName+',positionname from '+@tableName+'
')


生成的语句是这样的:
select top 10 area,positionname from station
OwenZeng_DBA 2017-09-15
  • 打赏
  • 举报
回复
引用 楼主 blueapple89 的回复:
例子: 正常语句:select top 10 area,positionname from station 执行字符串语句:

Declare @areaName varchar(50)='area' ,@tableName varchar(50)='station'
exec('
select top 10 '+@areaName+',positionname from '+@tableName+'
')
问题: 如何理解加号+前的分号‘,我知道是用来转义,但不清楚转义哪一个符号 比如:例子一中的'+@areaName+' 把值代入是 ‘+ area+’ 还是 ‘+ ‘area‘+’ 加号前面的分号’是用来转义+号?还是转义加号里面的分号’
是是 ‘+ area+’。这里的分号和转义没关系,你的例子里没有用到转义,就是用来把字符串包含起来。
听雨停了 2017-09-15
  • 打赏
  • 举报
回复

--默认情况下, '是字符串的边界符, 如果在字符串中包含', 则必须使用两个', 第1个'就是转义符
--例如我要把a'bc这个字符显示出来,就得在a'bc中的'号前多加一个'号,那么第一个'号就是转义符,用来转义a'bc中的'号
SELECT 'a''bc'
--结果显示如下--
a'bc

(1 行受影响)

--你的sql语句,就是一个字符串拼接,因为字符串要用''引起来, 
--所以有了'select top 10 '和',positionname from '这两个字符串;
--而变量(@areaName和@tableName)要和字符串拼接起来就要用到+号,所以就有了下面的语句
exec('select top 10 '  +@areaName+  ',positionname from '  +@tableName+'')
shoppo0505 2017-09-15
  • 打赏
  • 举报
回复
select top 10 前面也有单引号,select top 10本身是个字符串,也是命令的一部分,你这操作是先拼接sql语句,然后exec执行
kyupis 2017-09-15
  • 打赏
  • 举报
回复
把拼接的打印出来

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧