我把2005的一个数据库通过生成脚本转移到了sql2000中,表存储过程等都创建成功了,但是有下面一个存储过程在sql2000中创建成功却在执行的时候会有‘列名 'sort' 无效。’的错误,而在sql2005中很正常。是因为临时表的问题么?应该怎样修改呢?O(∩_∩)O谢谢~
以下是存储过程代码:
--首页房屋出租出售页信息
CREATE proc [dbo].[HomeQZInfo]
@fidName varchar(50),
@PageSize int,
@PageIndex int,
@OrderType int,
@strWhere varchar(1500),
@rows int output,
@pagecount int output
 as
--C_Qiuzu 1
select ID as pid,[Type],ExpectAddr as Address,Rentrange 
as Price,Room,Hall,Toilet,[Floor],CreateTime,Floorarea,Status,[Property]
into #tmpqz from C_Qiuzu where Status!=2 and CreateTime<=Validity
--添加区分列。插入默认值为0,constraint
 alter table #tmpqz ADD sort int NULL  DEFAULT 0 WITH VALUES 
update #tmpqz set sort=1 where sort=0
--取消标识列 
 SET   IDENTITY_INSERT  #tmpqz  ON
--U_Qiuzu 2 表数据 
insert into #tmpqz(pid,[Type],Address,Price,Room,Hall,Toilet,
[Floor],CreateTime,Floorarea,Status,[Property] )
select ID,[Type],ExpectAddr,Rentrange,Room,Hall,Toilet,[Floor],CreateTime,
Floorarea,Status,[Property] from U_Qiuzu 
where Status!=2 and CreateTime<=Validity
--更改区分列
update #tmpqz set sort=2 where sort=0
---U_SecondBuy 3表数据
insert into #tmpqz(pid,[Type],Address,Price,Room,Hall,Toilet,[Floor],
CreateTime,Floorarea,Status,[Property])
select ID,[Type],Address,Pricerange,Room,Hall,Toilet,[Floor],CreateTime,
Floorarea,Status,[Property] from U_SecondBuy 
where Status!=2 and CreateTime<=Validity
----更改区分列的值
update #tmpqz set sort=3 where sort=0
---C_SecondBuy 4表数据
insert into #tmpqz(pid,[Type],Address,Price,Room,Hall,Toilet,[Floor],
CreateTime,Floorarea,Status,[Property])
select ID,[Type],Address,Pricerange,Room,Hall,Toilet,[Floor],CreateTime,
Floorarea,Status,[Property] from C_SecondBuy 
where  Status!=2 and CreateTime<=Validity
--更改区分列
update #tmpqz set sort=4 where sort=0
exec pagination '#tmpqz','*',@fidName,@PageSize,@PageIndex,@OrderType,@strWhere,@rows output,@pagecount output
drop table #tmpqz
GO

解决方案 »

  1.   

    查看sql语句中查询的列名是否写错了,列名是否用了关键字,联合查询的时候是否有重复的列,
    注意单引号的使用~
      

  2.   

    写这个存储过程的人不是在玩自己,
    就是在玩你!!!不信大家来看:1> select ID as pid,[Type],ExpectAddr as Address,Rentrange 
      as Price,Room,Hall,Toilet,[Floor],CreateTime,Floorarea,Status,[Property]
      into #tmpqz from C_Qiuzu where Status!=2 and CreateTime<=Validity2> alter table #tmpqz ADD sort int NULL DEFAULT 0 WITH VALUES 3> update #tmpqz set sort=1 where sort=0为什么要这样分三步??为什么象下面一口气搞定???select ID as pid,[Type],ExpectAddr as Address,Rentrange as Price,Room,Hall,Toilet,[Floor],CreateTime,Floorarea,Status,[Property],1 as sort
    into #tmpqz from C_Qiuzu where Status!=2 and CreateTime<=Validity
      

  3.   

    我见这个临时表是存储了三个表的数据(取三个表有共同的列),但又为了能在临时表中区分出是这三个表中哪个表的数据,我就建了sort列能明白我的初衷么?
      

  4.   


    那我想问你,
    象我那样一步到位,
    有什么问题?你后面不能再update吗??
      

  5.   

    select ......,1 as sort
    into #tmpqz ......我写的里面有 1 as sort 这段,
    你是不是没看见
      

  6.   

    昂,是,你说的是对的!O(∩_∩)O~是我掌握不太好~谢谢~
    但是为什么会出现‘列名sort无效’这个错误呢?
      

  7.   

    你还不明白吗?????
    你第一次ADD一个SORT列进临时表,
    后面再INSERT,却没给这个列赋值!!!!--U_Qiuzu 2 表数据 
    insert into #tmpqz(pid,[Type],Address,Price,Room,Hall,Toilet,
    [Floor],CreateTime,Floorarea,Status,[Property] )
    select ID,[Type],ExpectAddr,Rentrange,Room,Hall,Toilet,[Floor],CreateTime,
    Floorarea,Status,[Property] from U_Qiuzu 
    where Status!=2 and CreateTime<=Validity这句里面,什么地方给SORT赋值拉????????
      

  8.   

    改下:
    CREATE proc [dbo].[HomeQZInfo]
    @fidName varchar(50),
    @PageSize int,
    @PageIndex int,
    @OrderType int,
    @strWhere varchar(1500),
    @rows int output,
    @pagecount int output
     as
    --C_Qiuzu 1
    select ID as pid,[Type],ExpectAddr as Address,Rentrange 
    as Price,Room,Hall,Toilet,[Floor],CreateTime,Floorarea,Status,[Property],
    1 as sort
    into #tmpqz from C_Qiuzu where Status!=2 and CreateTime<=Validity
    --取消标识列 
     SET IDENTITY_INSERT #tmpqz ON
    --U_Qiuzu 2 表数据 
    insert into #tmpqz(pid,[Type],Address,Price,Room,Hall,Toilet,
    [Floor],CreateTime,Floorarea,Status,[Property],sort )
    select ID,[Type],ExpectAddr,Rentrange,Room,Hall,Toilet,[Floor],CreateTime,
    Floorarea,Status,[Property],2 as sort  from U_Qiuzu 
    where Status!=2 and CreateTime<=Validity---U_SecondBuy 3表数据
    insert into #tmpqz(pid,[Type],Address,Price,Room,Hall,Toilet,[Floor],
    CreateTime,Floorarea,Status,[Property])
    select ID,[Type],Address,Pricerange,Room,Hall,Toilet,[Floor],CreateTime,
    Floorarea,Status,[Property],3 as sort from U_SecondBuy 
    where Status!=2 and CreateTime<=Validity---C_SecondBuy 4表数据
    insert into #tmpqz(pid,[Type],Address,Price,Room,Hall,Toilet,[Floor],
    CreateTime,Floorarea,Status,[Property])
    select ID,[Type],Address,Pricerange,Room,Hall,Toilet,[Floor],CreateTime,
    Floorarea,Status,[Property],4 as sort from C_SecondBuy 
    where Status!=2 and CreateTime<=Validityexec pagination '#tmpqz','*',@fidName,@PageSize,@PageIndex,@OrderType,@strWhere,@rows output,@pagecount output
    drop table #tmpqz
    GO