日期:2014-05-18  浏览次数:20573 次

SQL2000的数据库直接附加到2008会不会有问题?
SQL2000的数据库直接附加到2008会不会有问题?求实践过的

------解决方案--------------------
没有问题
------解决方案--------------------
应该没有,但是视图中order by会跟以前不一样
------解决方案--------------------
貌似会有问题.

昨晚,写一个行转列例程,在08下做,结果老是提示" 在 ( 后有语法错误",(前面是 pivot ,后面是 sum
想了很久,不得要领,后将程序复制到原来在数据库test 下开的一个查询窗口,居然又不错了.查了至少有半个小时,突然发现,原来运行的那个窗口,是在 pubs 数据库下的,而 pubs 数据库是从 2000 中备份后还原出来的!

很奇怪会出这样的问题.
------解决方案--------------------
又查了一下,同一程序在同样从2000恢复的 Northwind 亦报错.
------解决方案--------------------
不过,在pubs 和 northwind 下可以使用 row_number() 函数.
------解决方案--------------------
打开查询窗口,把当前数据库设置为你附加来的数据库,运行一下下面的程序,看是否会报错,如果不报错,则没问题:
SQL code
create table t1(支付ID int,支付名称 nvarchar(10))
insert into t1 select 1,'刷卡'
insert into t1 select 2,'现金'
insert into t1 select 3,'挂账'
create table t2(支付信息ID int,支付方式ID int,支付金额 int,支付时间 DateTime)
insert into t2 select 1,1,100,'2011-10-09 11:28:16.780'
insert into t2 select 2,1,50,'2011-10-09 11:38:19.153'
insert into t2 select 3,2,200,'2011-10-09 13:28:16.780'
insert into t2 select 4,2,100,'2011-10-15 11:28:16.780'
insert into t2 select 5,2,50,'2011-10-15 11:38:19.153'
insert into t2 select 6,3,200,'2011-10-15 13:28:16.780'
go
declare @s nvarchar(max),@s1 nvarchar(max)
--获得列标头[a],[b]
select @s=isnull(@s+',','')+'sum(['+ltrim(支付id)+ ']) as ['+ 支付名称 +'金额]',@s1=isnull(@s1+',','')+'['+ltrim(支付id)+']' from t1
exec('select dt as 支付时间,'+@s+' from(select convert(varchar(10),支付时间,120)dt,'+@s1+' from t2 pivot(sum(支付金额) for 支付方式ID in('+@s1+'))b)t group by dt')

go
drop table t1,t2
go

------解决方案--------------------
可能有些地方不会兼容很好吧
------解决方案--------------------
不会。

但不建议这样,除了在兼容性上有差异,
在数据库操作上也存在隐患 (可能因数据库再脱机、分离导致不可用)。

如果确定采用该方式,勤做备份,指定有效备份策略。