22,207
社区成员
发帖
与我相关
我的任务
分享
Declare @areaName varchar(50)='area' ,@tableName varchar(50)='station'
exec('
select top 10 '+@areaName+',positionname from '+@tableName+'
')
exec('
select top 10 '+@areaName+',positionname from '+@tableName+'
')
你这样看,加号就是连接字符串,程序执行时会用变量的值替换变量:
'select top 10 '(第一个字符串常量) +@areaName(第二部分字符串变量)+',positionname from '(第三部分字符串常量)+@tableName(第四部分变量)+''(第五部分)
所以这里的单引号就是将字符串常量括起来Declare @areaName varchar(50)='area' ,@tableName varchar(50)='station'
print('
select top 10 '+@areaName+',positionname from '+@tableName+'
')
select top 10 area,positionname from station
--默认情况下, '是字符串的边界符, 如果在字符串中包含', 则必须使用两个', 第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+'')