declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) '+Subject+''
from (select distinct Subject from tt) as a
select @sql = @sql+' from tt group by name'
exec(@sql) '''+Subject+''' 这3个引号是什么意思啊,
这句话看不太懂
这是哪方面的知识啊 我需要看哪块的知识
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) '+Subject+''
from (select distinct Subject from tt) as a
select @sql = @sql+' from tt group by name'
exec(@sql) '''+Subject+''' 这3个引号是什么意思啊,
这句话看不太懂
这是哪方面的知识啊 我需要看哪块的知识
参考!
http://msdn.microsoft.com/zh-cn/library/ms176027.aspx
1 :普通SQL语句可以用Exec执行 eg: Select * from tableName
Exec('select * from tableName')
Exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:
declare @fname varchar(20)
set @fname = 'FiledName'
Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可
declare @fname varchar(20)
set @fname = 'FiledName' --设置字段名 declare @s varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- 成功
exec sp_executesql @s -- 此句正确 3. 输出参数
declare @num int,
@sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)
--如何将exec执行结果放入变量中? declare @num int,
@sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
--O'BrienSELECT ''''
--'单引号只用于包含字符串,不能用于分隔标识符。如果字符串包含嵌入的单引号,则应在该嵌入的单引号前再添加一个单引号。
select '''' 得到一个单引号
select 'abc''abc' 得到 abc'abc
默认情况下, '是字符串的边界符, 如果在字符串中包含 ', 则必须使用两个 ', 第1个 '就是转义符另一个转义符是 "
当SET QUOTED_IDENTIFIER OFF时, "是字符串边界符, 字符串中的 "必须用两个 "表示。
select '''***' 试试就知道了