动态SQL列转行问题

Scorpius246 2015-08-08 06:16:16
CREATE TABLE [dbo].[test1](
[id] [int] NULL,
[name] [varchar](50) NULL,
[class] [varchar](20) NULL
) ON [PRIMARY]
GO
insert into test1 values
(1 ,'a1' ,54),
(2 ,'a2' ,88),
(3 ,'a3',88),
(4 ,'a4',53)

declare @sql nvarchar(max)
select @sql=isnull(@sql+',','') + quotename([id]) from table1
print @sql
结果
--------------------------------------------
[a1],[a2],[a3],[a4]
求教 怎么理解 select @sql=isnull(@sql+',','') + quotename([name]) from table1
为什么 输出值= [a1],[a2],[a3],[a4]

...全文
153 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
study0316 2015-08-11
  • 打赏
  • 举报
回复
declare @sql nvarchar(max) select @sql=isnull(@sql+',','') + quotename([id]) from table1 print @sql quotename是内置函数,作用是为对象加上[],这个对应对象有特殊符号很有用(如点号等) 关于这段代码,首先定义的变量@sql默认值是null,于是第一次SELECT @sql的时候由于null+','还是NULL,然后就相当于一个空字符串+quotename(ID)列,第二次再累加的时候就相当于第一次的id加上逗号加上第二个id列。这种写法主要是避免处理拼接字符串之间的分隔符问题。包括很多工具函数中获取一个表所有列都是这种写法。
Pact_Alice 2015-08-10
  • 打赏
  • 举报
回复
declare @sql nvarchar(max) select @sql=isnull(@sql+',','') + quotename([id]) from [test1] print @sql declare @sql1 nvarchar(max) select @sql1=isnull(@sql+',','') + quotename(Name) from [test1] print @sql --这两个的差别就在于将指定字段行转列第一个是将ID行转列,第二个是将Name行转列
许晨旭 2015-08-09
  • 打赏
  • 举报
回复
只能和你说一下 quotename([name]) 的意思是把 name 的值用[] 包起来,其他的就得自己悟了

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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