日期:2014-05-17  浏览次数:20425 次

MSSQL2012与2000的语法比较
本人有俩语句,在2012上可以成功执行,可将代码粘贴到2000时,就报错了,难道语法上有区别?
问题一:

CREATE PROCEDURE [dbo].[copyDeptFromU8] 
...
DECLARE @sql varchar(256)
...
set @sql+='SELECT '''+@myFdb+''','''+@myYear+''',cDepCode as dep_id,cDepName as dep_name FROM '
...
-----2012中成功执行,在2000中则报错['+' 附近有语法错误。]我觉得这没错吧

问题二:

select a.[dbid],a.FDB from(select b.*,row_number()over(partition by b.FDB 
order by getdate()) as id from 
(select dbid,(right(left([name],len(name)-5),len(left([name],len(name)-5))-7)) as FDB 
from master.dbo.sysdatabases where [name] like 'xxxx%') b
)a where a.id=1
---2012中成功执行,在2000中则报错['row_number' 不是可以识别的 函数名。],那在2000里面能用什么函数取代row_number的么?


以上俩个问题,求助。

------解决方案--------------------
CREATE PROCEDURE [dbo].[copyDeptFromU8] 
...
DECLARE @sql varchar(256)
...
set @sql='SELECT '''+@myFdb+''','''+@myYear+''',cDepCode as dep_id,cDepName as dep_name FROM '
...
-----2012中成功执行,在2000中则报错['+' 附近有语法错误。]我觉得这没错吧


select a.[dbid],a.FDB from(select b.*,row_number()over(partition by b.FDB 
order by getdate()) as id from 
(select dbid,(right(left([name],len(name)-5),len(left([name],len(name)-5))-7)) as FDB 
from master.dbo.sysdatabases where [name] like 'xxxx%') b
)a where a.id=1
---2012中成功执行,在2000中则报错['row_number' 不是可以识别的 函数名。],那在2000里面能用什么函数取代row_number的么?


row_number()over()是2005和其以上版本新增的函数。2000没有类似函数,实现该功能需要实用相关子查询实现


------解决方案--------------------
问题二,row_number是2005开始出现的东西,2000不支持
------解决方案--------------------
这个语句:set @sql+='SELECT '''+@myFdb+''','''+@myYear+''',cDepCode as dep_id'

中的符号 +=  只有在2008及以上的半年呗,才支持的哈

你改成这样就行:

set @sql=@sql + 'SELECT '''+@myFdb+''','''+@myYear+''',cDepCode as dep_id'