最近在学习2005 的 pivot时遇到这样的问题,语句
select * from temppivot
pivot
(
sum(sales)
for year in ([2000],[2005])
)t执行后抱错:
服务器: 消息 102,级别 15,状态 1,行 4
'(' 附近有语法错误。但是在别的机子 2005环境下则没有此错误提示请各位强人解惑, 不知是否与 兼容机别有关? 我的兼容级别是2000(80)
select * from temppivot
pivot
(
sum(sales)
for year in ([2000],[2005])
)t执行后抱错:
服务器: 消息 102,级别 15,状态 1,行 4
'(' 附近有语法错误。但是在别的机子 2005环境下则没有此错误提示请各位强人解惑, 不知是否与 兼容机别有关? 我的兼容级别是2000(80)
insert into temppivot values('b','2000','500' )
insert into temppivot values( 'b','2005','700')
insert into temppivot values('d','2000','800')
insert into temppivot values('d','2005','800' )
select * from temppivot
pivot
(
sum(sales)
for year in ([2000],[2005])
)t
pivot
(
sum(sales)
for year in ('2000','2005')
)t
create table temppivot (make varchar(100),year int,sales int) insert into temppivot values('a','2000','100' ) insert into temppivot values('a','2005','3500' )
insert into temppivot values('b','2000','500' )
insert into temppivot values( 'b','2005','700')
insert into temppivot values('d','2000','800')
insert into temppivot values('d','2005','800' )
select * from temppivot
pivot
(
sum(sales)
for year in ([2000],[2005])
)t/*
make 2000 2005
---------------------------------------------------------------------------------------------------- ----------- -----------
a 100 3500
b 500 700
d 800 800(3 row(s) affected)
*/drop table temppivot
select * from temppivot
pivot
(
sum(sales)
for year in ('2000','2005')
)t
--------------------------
一样抱错;服务器: 消息 102,级别 15,状态 1,行 4
'(' 附近有语法错误
-------------
可是,在我的2005上是抱错的, 不知道是否与兼容级别有关,因为我从2000的bak 在2005上恢复的时候 选择的兼容级别是80
在80兼容模式下,字段做参数的语句不能运行,如pivot, Outer Apply等,
其他如Row_number() Rank()等正常使用
因为业务的关系,数据库不能长时间的停机,如果我现在把兼容级别直接修改为90的话,会不会有什么问题(前不久刚用2000 的bak 在2005上作的恢复)?
论坛里搜下有很多
至于更改兼容模式,建议你在非数据库访问高峰时更改,具体什么后果我也不大清楚,没做过
这个问题解决了没有呢?我的也是这样子pivot语句运行没有问题,改为动态sql就会出错