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

关于sql2008和sql2000查询分析器的sql写法区别
以下是我写的存储过程的报错的部分
我截取一部分给大家看一下,麻烦告诉我一下哪里有错
alter PROCEDURE [dbo].[cleartele]
@CYear int,
@CMonth smallint,
@Error_Var int output
AS
DECLARE @STRCURDATE VARCHAR(7)
declare @telecode varchar(16)
declare @paydate datetime
declare @currpretotal numeric(7,2)
declare @i int
declare @m int
declare @year int
declare @month int
declare @currlevel smallint
DECLARE @STRINDEX VARCHAR(7)
DECLARE @WASTECODE VARCHAR(40)
DECLARE @CURRDATE VARCHAR(40)
DECLARE @UseDate_TJ_END  VARCHAR(20)
BEGIN TRANSACTION
SET @Error_Var = 0
SET @CURRDATE =  CONVERT(VARCHAR(6),GETDATE(),12) + REPLACE(CONVERT(VARCHAR(8),GETDATE(),8),':','')
set @i=(select COUNT(*) from TeleUser where telecode in (select telecode from User_Limit where LimitWay=1) )
while (@i>0)
begin
set @telecode=(select top 1 tu.TeleCode from (select top (@i) telecode from TeleUser where telecode in 
(select telecode from User_Limit where LimitWay=1) order by telecode asc) tu order by tu.TeleCode desc)
set @year=(select MAX(cyear) from Account where ClearFlag=6 and TeleCode=@telecode)
set @month=(select MAX(CMonth) from Account where ClearFlag=6 and TeleCode=@telecode)
set @paydate=(select MAX(PayDate) from PayWaste where TeleCode=@telecode)
set @currpretotal=(select currpretotal from PayWaste where PayDate=@paydate and TeleCode=@telecode)
set @currlevel=(select CurrLevel from User_Limit where TeleCode=@telecode)
set @UseDate_TJ_END=(SELECT  convert(varchar(10),dateadd(mm,T.SETUPNUM,t.UseDate15),120) UseDate_TJ_END
  FROM TELEUSER T,USER_MONEY U 
  WHERE T.TELECODE = U.TELECODE AND T.USEDATE15 IS NOT NULL and T.SETUPNUM  IS NOT NULL and 
  t.telecode=@telecode)
。。。。。。后面省略
在sql2008管理器里编译通过,在sql2000里编译报错,报错的地方显示在以下语句

set @telecode=(select top 1 tu.TeleCode from (select top (@i) telecode from TeleUser where telecode in 
(select telecode from User_Limit where LimitWay=1) order by telecode asc) tu order by tu.TeleCode desc)

报错的解释是“
消息 170,级别 15,状态 1,过程 cleartele,第 28 行
第 28 行: '(' 附近有语法错误。
消息 170,级别 15,状态 1,过程 cleartele,第 29 行
第 29 行: ')' 附近有语法错误。

麻烦高人告诉我哪里错了。2008不是对的嘛。是不是top (@i)的写法?
SQL

------解决方案--------------------
引用: