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'