CREATE PROCEDURE dataexchangepro
AS
DECLARE @queryCount nvarchar(50) 
DECLARE @id int 
DECLARE @地块编号 nvarchar(50) 
DECLARE @地块名称 nvarchar(50) 
DECLARE @地块座落 nvarchar(100) 
DECLARE @用地性质 nvarchar(50)
DECLARE @地块面积 float 
DECLARE @出让年期 nvarchar(50)
DECLARE @出让底价 int
DECLARE @起竞价 int
DECLARE @容积率 nvarchar(50)
DECLARE @容积率数 float 
DECLARE @建筑面积 nvarchar(50) 
DECLARE @建筑面积数 float 
DECLARE @建筑密度 nvarchar(50) 
DECLARE @绿化率 nvarchar(50)
DECLARE @开发程度 nvarchar(50) 
DECLARE @备注 nvarchar(200) 
DECLARE @报价增幅 int 
DECLARE @起始时间 datetime 
DECLARE @终止时间 datetime
DECLARE @公告文号 nvarchar(50) 
DECLARE @出让公告 image 
DECLARE @公告类型 nvarchar(50)
DECLARE @示意图 image 
DECLARE @成交与否 nvarchar(1) 
DECLARE @成交价 int
DECLARE @成交时间 datetime 
DECLARE @x smallint 
DECLARE @y smallint 
DECLARE @z nvarchar(50) 
DECLARE @jgxz nvarchar(1) 
DECLARE @users nvarchar(50) 
DECLARE @ip nvarchar(50) 
DECLARE @sj datetime
DECLARE @上报否 nvarchar(1) 
DECLARE @产业门类 nvarchar(100) 
DECLARE @所属区 nvarchar(50) 
DECLARE STOCKORDER_CUR cursor for
SELECT * FROM [tdxx_bak].[dbo].[land] where isexsit = 1

open STOCKORDER_CURfetch next from STOCKORDER_CUR into  @id,@地块编号,@地块名称,@地块座落,@用地性质,
@地块面积,  @出让年期 ,@出让底价 , @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
@绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , @出让公告 ,@公告类型 ,
@示意图,@成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 
while(@@fetch_status = 0)
BEGIN
select count(*) into @queryCount from [tdxx_bak].[dbo].[gpcr_land]  where id = @id
if @queryCount =1
BEGIN
UPDATE  [tdxx_bak].[dbo].[gpcr_land] set id=@id,地块编号=@地块编号,地块名称=@地块名称,地块座落=@地块座落,用地性质=@用地性质,
地块面积=@地块面积,出让年期=@出让年期,出让底价=@出让底价,起竞价=@起竞价,容积率=@容积率,容积率数=@容积率数,建筑面积=@建筑面积,建筑面积数=@建筑面积数,建筑密度=@建筑密度,
绿化率=@绿化率,开发程度=@开发程度,备注=@备注,报价增幅=@报价增幅,起始时间=@起始时间,终止时间=@终止时间,公告文号=@公告文号,出让公告=@出让公告,公告类型=@公告类型,
示意图=@示意图,成交与否=@成交与否,成交价=@成交价,成交时间=@成交时间,x=@x,y=@y,z=@z,jgxz=@jgxz,users=@users,ip=@ip,sj=@sj,上报否=@上报否,产业门类=@产业门类,所属区=@所属区
 where id=@id
 update [tdxx_bak].[dbo].[land] set isexsit=0 where id=@id

END
   else begin
  insert into [tdxx_bak].[dbo].[gpcr_land] values(@id,@地块编号,@地块名称,@地块座落,@用地性质,
@地块面积,  @出让年期 ,@出让底价 , @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
@绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , @出让公告 ,@公告类型 ,
@示意图,@成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 )
  update [tdxx_bak].[dbo].[land] set isexsit=0 where id=@id
end
fetch next from  STOCKORDER_CUR into @id,@地块编号,@地块名称,@地块座落,@用地性质,
@地块面积,  @出让年期 ,@出让底价 , @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
@绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , @出让公告 ,@公告类型 ,
@示意图,@成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 
ENDclose STOCKORDER_CUR
deallocate STOCKORDER_CUR

解决方案 »

  1.   

    过程报错,谁帮忙调一下,没用sqlserver,解决问题立即结贴给满分,在线等
      

  2.   

    没环境怎么调试啊,你自己debug一下不就得了?
    sqlserver08以后的debug还是挺好用的,不过用游标的话调试起来就有点操蛋了。
      

  3.   

    exec procName点击执行右边的绿色三角符号F11就开始了单步
    http://database.51cto.com/art/201012/236622.htm
      

  4.   

    问题是这个过程语法有问题,都没法入库
    select count(*) into @queryCount from [tdxx_bak].[dbo].[gpcr_land] where id = @id
    这一行报
    消息 170,级别 15,状态 1,过程 dataexchangepro,第 52 行
    第 52 行: '@queryCount' 附近有语法错误。
      

  5.   

    @queryCount 这个,你不应该定义为nvarchar,要用表变量。不然一个字符串存不了一个“表”
      

  6.   


    --应该是语法问题吧?--我估计这句的目的是这样的,把count出来的数据赋值给queryCount 
    select count(*) into @queryCount from [tdxx_bak].[dbo].[gpcr_land] where id = @id
    --那就是这样的
    select  @queryCount=count(*) from [tdxx_bak].[dbo].[gpcr_land] where id = @id
    --我猜的啊
      

  7.   

    不错,x_wy46 那个问题解决了,又有了新问题
    消息 2739,级别 16,状态 1,过程 dataexchangepro,第 3 行
    对于局部变量,text、ntext 和 image 数据类型无效。
    消息 2739,级别 16,状态 1,过程 dataexchangepro,第 3 行
    对于局部变量,text、ntext 和 image 数据类型无效。
      

  8.   

    CREATE PROCEDURE dataexchangepro
    AS
    DECLARE @queryCount nvarchar(50) 
    DECLARE @id int 
    DECLARE @地块编号 nvarchar(50) 
    DECLARE @地块名称 nvarchar(50) 
    DECLARE @地块座落 nvarchar(100) 
    DECLARE @用地性质 nvarchar(50)
    DECLARE @地块面积 float 
    DECLARE @出让年期 nvarchar(50)
    DECLARE @出让底价 int
    DECLARE @起竞价 int
    DECLARE @容积率 nvarchar(50)
    DECLARE @容积率数 float 
    DECLARE @建筑面积 nvarchar(50) 
    DECLARE @建筑面积数 float 
    DECLARE @建筑密度 nvarchar(50) 
    DECLARE @绿化率 nvarchar(50)
    DECLARE @开发程度 nvarchar(50) 
    DECLARE @备注 nvarchar(200) 
    DECLARE @报价增幅 int 
    DECLARE @起始时间 datetime 
    DECLARE @终止时间 datetime
    DECLARE @公告文号 nvarchar(50) 
    DECLARE @出让公告 image 
    DECLARE @公告类型 nvarchar(50)
    DECLARE @示意图 image 
    DECLARE @成交与否 nvarchar(1) 
    DECLARE @成交价 int
    DECLARE @成交时间 datetime 
    DECLARE @x smallint 
    DECLARE @y smallint 
    DECLARE @z nvarchar(50) 
    DECLARE @jgxz nvarchar(1) 
    DECLARE @users nvarchar(50) 
    DECLARE @ip nvarchar(50) 
    DECLARE @sj datetime
    DECLARE @上报否 nvarchar(1) 
    DECLARE @产业门类 nvarchar(100) 
    DECLARE @所属区 nvarchar(50) 
    DECLARE STOCKORDER_CUR cursor for
    SELECT * FROM [tdxx_bak].[dbo].[land] where isexsit = 1

    open STOCKORDER_CURfetch next from STOCKORDER_CUR into  @id,@地块编号,@地块名称,@地块座落,@用地性质,
    @地块面积,  @出让年期 ,@出让底价 , @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
    @绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , @出让公告 ,@公告类型 ,
    @示意图,@成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 
    while(@@fetch_status = 0)
    BEGIN
    select  @queryCount=count(*) from [tdxx_bak].[dbo].[gpcr_land] where id = @id
    if @queryCount =1
    BEGIN
    UPDATE  [tdxx_bak].[dbo].[gpcr_land] set id=@id,地块编号=@地块编号,地块名称=@地块名称,地块座落=@地块座落,用地性质=@用地性质,
    地块面积=@地块面积,出让年期=@出让年期,出让底价=@出让底价,起竞价=@起竞价,容积率=@容积率,容积率数=@容积率数,建筑面积=@建筑面积,建筑面积数=@建筑面积数,建筑密度=@建筑密度,
    绿化率=@绿化率,开发程度=@开发程度,备注=@备注,报价增幅=@报价增幅,起始时间=@起始时间,终止时间=@终止时间,公告文号=@公告文号,出让公告=@出让公告,公告类型=@公告类型,
    示意图=@示意图,成交与否=@成交与否,成交价=@成交价,成交时间=@成交时间,x=@x,y=@y,z=@z,jgxz=@jgxz,users=@users,ip=@ip,sj=@sj,上报否=@上报否,产业门类=@产业门类,所属区=@所属区
     where id=@id
     update [tdxx_bak].[dbo].[land] set isexsit=0 where id=@id

    END
       else begin
      insert into [tdxx_bak].[dbo].[gpcr_land] values(@id,@地块编号,@地块名称,@地块座落,@用地性质,
    @地块面积,  @出让年期 ,@出让底价 , @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
    @绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , @出让公告 ,@公告类型 ,
    @示意图,@成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 )
      update [tdxx_bak].[dbo].[land] set isexsit=0 where id=@id
    end
    fetch next from  STOCKORDER_CUR into @id,@地块编号,@地块名称,@地块座落,@用地性质,
    @地块面积,  @出让年期 ,@出让底价 , @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
    @绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , @出让公告 ,@公告类型 ,
    @示意图,@成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 
    ENDclose STOCKORDER_CUR
    deallocate STOCKORDER_CUR
    就改了x_wy46所说的那个问题,现在报
    消息 2739,级别 16,状态 1,过程 dataexchangepro,第 3 行
    对于局部变量,text、ntext 和 image 数据类型无效。
    消息 2739,级别 16,状态 1,过程 dataexchangepro,第 3 行
    对于局部变量,text、ntext 和 image 数据类型无效。
      

  9.   

    你看一下表结构,错误提示应该比较清楚了,“对于局部变量,text、ntext 和 image 数据类型无效”你搜一下,应该有不少类似的问题。
      

  10.   

    这样试试,你干嘛还用nvarchar呢CREATE PROCEDURE dataexchangepro
     AS 
         DECLARE @queryCount INT  
         DECLARE @id INT 
         DECLARE @地块编号 NVARCHAR(50) 
         DECLARE @地块名称 NVARCHAR(50) 
         DECLARE @地块座落 NVARCHAR(100) 
         DECLARE @用地性质 NVARCHAR(50)
         DECLARE @地块面积 FLOAT 
         DECLARE @出让年期 NVARCHAR(50)
         DECLARE @出让底价 INT
         DECLARE @起竞价 INT
         DECLARE @容积率 NVARCHAR(50)
         DECLARE @容积率数 FLOAT 
         DECLARE @建筑面积 NVARCHAR(50) 
         DECLARE @建筑面积数 FLOAT 
         DECLARE @建筑密度 NVARCHAR(50) 
         DECLARE @绿化率 NVARCHAR(50)
         DECLARE @开发程度 NVARCHAR(50) 
         DECLARE @备注 NVARCHAR(200) 
         DECLARE @报价增幅 INT 
         DECLARE @起始时间 DATETIME 
         DECLARE @终止时间 DATETIME
         DECLARE @公告文号 NVARCHAR(50) 
         DECLARE @出让公告 IMAGE 
         DECLARE @公告类型 NVARCHAR(50)
         DECLARE @示意图 IMAGE 
         DECLARE @成交与否 NVARCHAR(1) 
         DECLARE @成交价 INT
         DECLARE @成交时间 DATETIME 
         DECLARE @x SMALLINT 
         DECLARE @y SMALLINT 
         DECLARE @z NVARCHAR(50) 
         DECLARE @jgxz NVARCHAR(1) 
         DECLARE @users NVARCHAR(50) 
         DECLARE @ip NVARCHAR(50) 
         DECLARE @sj DATETIME
         DECLARE @上报否 NVARCHAR(1) 
         DECLARE @产业门类 NVARCHAR(100) 
         DECLARE @所属区 NVARCHAR(50) 
         DECLARE STOCKORDER_CUR CURSOR
         FOR
             SELECT  *
             FROM    [tdxx_bak].[dbo].[land]
             WHERE   isexsit = 1
         
         OPEN STOCKORDER_CUR
     
         FETCH NEXT FROM STOCKORDER_CUR INTO @id, @地块编号, @地块名称, @地块座落, @用地性质, @地块面积,
             @出让年期, @出让底价, @起竞价, @容积率, @容积率数, @建筑面积, @建筑面积数, @建筑密度, @绿化率, @开发程度,
             @备注, @报价增幅, @起始时间, @终止时间, @公告文号, @出让公告, @公告类型, @示意图, @成交与否, @成交价,
             @成交时间, @x, @y, @z, @jgxz, @users, @ip, @sj, @上报否, @产业门类, @所属区 
         WHILE ( @@fetch_status = 0 ) 
             BEGIN
                 SELECT  @queryCount = COUNT(*)
                 FROM    [tdxx_bak].[dbo].[gpcr_land]
                 WHERE   id = @id
                 IF @queryCount = 1 
                     BEGIN            
                         UPDATE  [tdxx_bak].[dbo].[gpcr_land]
                         SET     id = @id ,
                                 地块编号 = @地块编号 ,
                                 地块名称 = @地块名称 ,
                                 地块座落 = @地块座落 ,
                                 用地性质 = @用地性质 ,
                                 地块面积 = @地块面积 ,
                                 出让年期 = @出让年期 ,
                                 出让底价 = @出让底价 ,
                                 起竞价 = @起竞价 ,
                                 容积率 = @容积率 ,
                                 容积率数 = @容积率数 ,
                                 建筑面积 = @建筑面积 ,
                                 建筑面积数 = @建筑面积数 ,
                                 建筑密度 = @建筑密度 ,
                                 绿化率 = @绿化率 ,
                                 开发程度 = @开发程度 ,
                                 备注 = @备注 ,
                                 报价增幅 = @报价增幅 ,
                                 起始时间 = @起始时间 ,
                                 终止时间 = @终止时间 ,
                                 公告文号 = @公告文号 ,
                                 出让公告 = @出让公告 ,
                                 公告类型 = @公告类型 ,
                                 示意图 = @示意图 ,
                                 成交与否 = @成交与否 ,
                                 成交价 = @成交价 ,
                                 成交时间 = @成交时间 ,
                                 x = @x ,
                                 y = @y ,
                                 z = @z ,
                                 jgxz = @jgxz ,
                                 users = @users ,
                                 ip = @ip ,
                                 sj = @sj ,
                                 上报否 = @上报否 ,
                                 产业门类 = @产业门类 ,
                                 所属区 = @所属区
                         WHERE   id = @id
                         UPDATE  [tdxx_bak].[dbo].[land]
                         SET     isexsit = 0
                         WHERE   id = @id
             
                     END
                 ELSE 
                     BEGIN
                         INSERT  INTO [tdxx_bak].[dbo].[gpcr_land]
                         VALUES  ( @id, @地块编号, @地块名称, @地块座落, @用地性质, @地块面积, @出让年期,
                                   @出让底价, @起竞价, @容积率, @容积率数, @建筑面积, @建筑面积数, @建筑密度,
                                   @绿化率, @开发程度, @备注, @报价增幅, @起始时间, @终止时间, @公告文号,
                                   @出让公告, @公告类型, @示意图, @成交与否, @成交价, @成交时间, @x, @y,
                                   @z, @jgxz, @users, @ip, @sj, @上报否, @产业门类, @所属区 )
                         UPDATE  [tdxx_bak].[dbo].[land]
                         SET     isexsit = 0
                         WHERE   id = @id
                     END
                 FETCH NEXT FROM STOCKORDER_CUR INTO @id, @地块编号, @地块名称, @地块座落,
                     @用地性质, @地块面积, @出让年期, @出让底价, @起竞价, @容积率, @容积率数, @建筑面积, @建筑面积数,
                     @建筑密度, @绿化率, @开发程度, @备注, @报价增幅, @起始时间, @终止时间, @公告文号, @出让公告,
                     @公告类型, @示意图, @成交与否, @成交价, @成交时间, @x, @y, @z, @jgxz, @users,
                     @ip, @sj, @上报否, @产业门类, @所属区 
             END
     
         CLOSE STOCKORDER_CUR
         DEALLOCATE STOCKORDER_CUR
     
      

  11.   

    肯定是你表中有text类型字段,声明的变量时varchar(*),游标开起来后赋值中出的错
    尝试去掉中间变量,直接(将查询数据组织好)插入到表中
      

  12.   

    @DBA_Huangzj 修改没用,@x_wy46 我数据库中确实有text image ntext类型的数据,怎么去掉中间变量啊, 能给个简单的例子嘛
      

  13.   


    --你完全不用声明那么多变量,看起来眼花缭乱啊--给你一个例子
    --A表数据更新B表数据(避免中间变量,看起来更清晰直观,而且很有可能避免刚才的报错)
    update Table1 set Table1.ID=TABLE2.ID
    from TABLE2
    where Table1.ID=TABLE2.ID--试着修改你的存储过程,直接用数据源表更新目的表
      

  14.   

    update Table1 set Table1.ID=TABLE2.ID
    from TABLE2
    where Table1.ID=TABLE2.ID这样貌似无法使用游标吧,我需要得到id做判断的,我一一检查过了,声明变量类型应该和数据库是一样的,没有问题
      

  15.   

    其实你先把你的text字段先去掉,不要中间变量,直接由一个表中的这类字段更新另外一个表试试,看报不报错,其实你的存储过程逻辑还是非常简单的,只不过搞了一大堆变量,看起来复杂了,呵呵。
      

  16.   


    还是不要中间变量,问题总是有办法解决的。用临时表试试看,把中间结果存放在临时表中,用临时表和目的表关联我做做demo试试
      

  17.   

     select  @queryCount=count(*) from [tdxx_bak].[dbo].[gpcr_land] where id = @id
        if @queryCount =1   --就从这开始,将结果写入临时表
       --这里弄严谨点,判断#temp1 存在就删除,我就不写了
       select * into #temp1 from  [tdxx_bak].[dbo].[gpcr_land] WHERE   id = @id
       --用临时表关联[tdxx_bak].[dbo].[gpcr_land]做更新   --试试看……
      

  18.   

    建临时表的决定不在我手里啊,我发现只要问题就在于这两个
     DECLARE @出让公告 IMAGE 
     DECLARE @示意图 IMAGE 
    变量类型的问题,我想问的是在不见临时表的情况下,可以把变量的类型改为什么类型
      

  19.   

    但是数据库中这两个字段就是image类型
      

  20.   

    那两个字段本身就是存储的图片,除非你不往数据库中存储,以文件的方式存储,数据库中存储图片名称信息,可以改varchar,不过这样比较麻烦,估计你连应用程序一块该,不推荐。我还是推荐使用临时表,局部临时表就像变量一样啊,只对当前连接用户可见,对其他地方基本上没啥影响,为啥不用呢?
      

  21.   

    或者是你这个两个字段先不管,做完所有的逻辑后,单独写个sql来更新,这两字段,总之办法是有的,只要你想折腾,呵呵。
      

  22.   

    这样呢?CREATE PROCEDURE dataexchangepro
     AS
     DECLARE @queryCount nvarchar(50) 
     DECLARE @id int 
     DECLARE @地块编号 nvarchar(50) 
     DECLARE    @地块名称 nvarchar(50) 
     DECLARE    @地块座落 nvarchar(100) 
     DECLARE    @用地性质 nvarchar(50)
     DECLARE    @地块面积 float 
     DECLARE    @出让年期 nvarchar(50)
     DECLARE    @出让底价 int
     DECLARE    @起竞价 int
     DECLARE    @容积率 nvarchar(50)
     DECLARE @容积率数 float 
     DECLARE @建筑面积 nvarchar(50) 
     DECLARE    @建筑面积数 float 
     DECLARE    @建筑密度 nvarchar(50) 
     DECLARE    @绿化率 nvarchar(50)
     DECLARE    @开发程度 nvarchar(50) 
     DECLARE    @备注 nvarchar(200) 
     DECLARE    @报价增幅 int 
     DECLARE    @起始时间 datetime 
     DECLARE    @终止时间 datetime
     DECLARE    @公告文号 nvarchar(50) 
     DECLARE    @出让公告 nvarchar(max)  
     DECLARE    @公告类型 nvarchar(50)
     DECLARE    @示意图 nvarchar(max)  
     DECLARE    @成交与否 nvarchar(1) 
     DECLARE    @成交价 int
     DECLARE    @成交时间 datetime 
     DECLARE    @x smallint 
     DECLARE    @y smallint 
     DECLARE    @z nvarchar(50) 
     DECLARE    @jgxz nvarchar(1) 
     DECLARE    @users nvarchar(50) 
     DECLARE    @ip nvarchar(50) 
     DECLARE    @sj datetime
     DECLARE    @上报否 nvarchar(1) 
     DECLARE    @产业门类 nvarchar(100) 
     DECLARE    @所属区 nvarchar(50) 
     DECLARE STOCKORDER_CUR cursor for
         SELECT * FROM [tdxx_bak].[dbo].[land] where isexsit = 1
         
         open STOCKORDER_CUR
     
     fetch next from STOCKORDER_CUR into  @id,@地块编号,@地块名称,@地块座落,@用地性质,
     @地块面积,     @出让年期 ,@出让底价 ,    @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
     @绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , @出让公告 ,@公告类型 ,
     @示意图,@成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 
     while(@@fetch_status = 0)
     BEGIN
         select  @queryCount=count(*) from [tdxx_bak].[dbo].[gpcr_land] where id = @id
         if @queryCount =1
         BEGIN            
             UPDATE  [tdxx_bak].[dbo].[gpcr_land] set id=@id,地块编号=@地块编号,地块名称=@地块名称,地块座落=@地块座落,用地性质=@用地性质,
             地块面积=@地块面积,出让年期=@出让年期,出让底价=@出让底价,起竞价=@起竞价,容积率=@容积率,容积率数=@容积率数,建筑面积=@建筑面积,建筑面积数=@建筑面积数,建筑密度=@建筑密度,
             绿化率=@绿化率,开发程度=@开发程度,备注=@备注,报价增幅=@报价增幅,起始时间=@起始时间,终止时间=@终止时间,公告文号=@公告文号,出让公告=@出让公告,公告类型=@公告类型,
             示意图=@示意图,成交与否=@成交与否,成交价=@成交价,成交时间=@成交时间,x=@x,y=@y,z=@z,jgxz=@jgxz,users=@users,ip=@ip,sj=@sj,上报否=@上报否,产业门类=@产业门类,所属区=@所属区
              where id=@id
              update [tdxx_bak].[dbo].[land] set isexsit=0 where id=@id
             
         END
        else begin
       insert into [tdxx_bak].[dbo].[gpcr_land] values(@id,@地块编号,@地块名称,@地块座落,@用地性质,
     @地块面积,     @出让年期 ,@出让底价 ,    @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
     @绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , @出让公告 ,@公告类型 ,
     @示意图,@成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 )
       update [tdxx_bak].[dbo].[land] set isexsit=0 where id=@id
     end
         fetch next from  STOCKORDER_CUR into @id,@地块编号,@地块名称,@地块座落,@用地性质,
     @地块面积,     @出让年期 ,@出让底价 ,    @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
     @绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , @出让公告 ,@公告类型 ,
     @示意图,@成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 
     END
     
     close STOCKORDER_CUR
     deallocate STOCKORDER_CUR
      

  23.   

    @DBA_Huangzj 同样不行,之前我试过修改为 nvarchar(max),貌似它对2005有效,对2008无效消息 170,级别 15,状态 1,过程 dataexchangepro,第 25 行
    第 25 行: 'max' 附近有语法错误。
    消息 170,级别 15,状态 1,过程 dataexchangepro,第 27 行
    第 27 行: 'max' 附近有语法错误。
    消息 137,级别 15,状态 1,过程 dataexchangepro,第 48 行
    必须声明变量 '@出让公告'。
    消息 137,级别 15,状态 2,过程 dataexchangepro,第 57 行
    必须声明变量 '@出让公告'。
    消息 137,级别 15,状态 2,过程 dataexchangepro,第 66 行
    必须声明变量 '@出让公告'。
    消息 137,级别 15,状态 1,过程 dataexchangepro,第 72 行
    必须声明变量 '@出让公告'。
      

  24.   

    我本机只有2008R2。你传入的参数全部换成nvarchar(max)没?没有真实表,我这边编译通过的。但是执行不了。很难调试,加上又不知道你的参数
      

  25.   


    CREATE PROCEDURE dataexchangepro
    AS
    DECLARE @queryCount nvarchar(50) 
    DECLARE @id int 
    DECLARE @地块编号 nvarchar(50) 
    DECLARE    @地块名称 nvarchar(50) 
    DECLARE    @地块座落 nvarchar(100) 
    DECLARE    @用地性质 nvarchar(50)
    DECLARE    @地块面积 float 
    DECLARE    @出让年期 nvarchar(50)
    DECLARE    @出让底价 int
    DECLARE    @起竞价 int
    DECLARE    @容积率 nvarchar(50)
    DECLARE @容积率数 float 
    DECLARE @建筑面积 nvarchar(50) 
    DECLARE    @建筑面积数 float 
    DECLARE    @建筑密度 nvarchar(50) 
    DECLARE    @绿化率 nvarchar(50)
    DECLARE    @开发程度 nvarchar(50) 
    DECLARE    @备注 nvarchar(200) 
    DECLARE    @报价增幅 int 
    DECLARE    @起始时间 datetime 
    DECLARE    @终止时间 datetime
    DECLARE    @公告文号 nvarchar(50) 
    DECLARE    @出让公告 image 
    DECLARE    @公告类型 nvarchar(50)
    DECLARE    @示意图 image 
    DECLARE    @成交与否 nvarchar(1) 
    DECLARE    @成交价 int
    DECLARE    @成交时间 datetime 
    DECLARE    @x smallint 
    DECLARE    @y smallint 
    DECLARE    @z nvarchar(50) 
    DECLARE    @jgxz nvarchar(1) 
    DECLARE    @users nvarchar(50) 
    DECLARE    @ip nvarchar(50) 
    DECLARE    @sj datetime
    DECLARE    @上报否 nvarchar(1) 
    DECLARE    @产业门类 nvarchar(100) 
    DECLARE    @所属区 nvarchar(50) 
    DECLARE STOCKORDER_CUR cursor for
        SELECT * FROM [tdxx_bak].[dbo].[land] where isexsit = 1
        
        open STOCKORDER_CURfetch next from STOCKORDER_CUR into  @id,@地块编号,@地块名称,@地块座落,@用地性质,
    @地块面积,     @出让年期 ,@出让底价 ,    @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
    @绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , 
    --
    --@出让公告 ,
    @公告类型 ,
    --
    --@示意图,
    @成交与否,
    @成交价 ,
    @成交时间 ,
    @x ,
    @y ,
    @z , 
    @jgxz ,
    @users ,
    @ip ,
    @sj ,
    @上报否 ,
    @产业门类 , 
    @所属区 
    while(@@fetch_status = 0)
    BEGIN
        select  @queryCount=count(*) from [tdxx_bak].[dbo].[gpcr_land] where id = @id
        
        
        /**************************************/
        if object_id('tempdb..#temp1') is not null   
        begin
    drop table #temp1
    end
        SELECT * INTO #temp1  from [tdxx_bak].[dbo].[gpcr_land] where id = @id
        /**************************************/
        
        if @queryCount =1
        BEGIN            
    UPDATE  [tdxx_bak].[dbo].[gpcr_land] set id=@id,地块编号=@地块编号,地块名称=@地块名称,地块座落=@地块座落,用地性质=@用地性质,
    地块面积=@地块面积,出让年期=@出让年期,出让底价=@出让底价,起竞价=@起竞价,容积率=@容积率,容积率数=@容积率数,建筑面积=@建筑面积,建筑面积数=@建筑面积数,建筑密度=@建筑密度,
    绿化率=@绿化率,开发程度=@开发程度,备注=@备注,报价增幅=@报价增幅,起始时间=@起始时间,终止时间=@终止时间,公告文号=@公告文号,

    --用temp1的数据更新
    --出让公告=@出让公告,
    出让公告=#temp1.出让公告
    --示意图=@示意图,
    示意图=#temp1.示意图,



    公告类型=@公告类型,
    成交与否=@成交与否,
    成交价=@成交价,
    成交时间=@成交时间,x=@x,y=@y,z=@z,jgxz=@jgxz,users=@users,ip=@ip,sj=@sj,上报否=@上报否,产业门类=@产业门类,所属区=@所属区
    from #temp1 
     where [tdxx_bak].[dbo].[gpcr_land].ID=#temp1.ID and [tdxx_bak].[dbo].[gpcr_land].ID=@id
     
     
     update [tdxx_bak].[dbo].[land] set isexsit=0 where id=@id
            
        END
       else 
       begin
       
             --这个插入数据的数据可以从#temp1中取,你自己写吧,一定要动手试试,光看不行
      insert into [tdxx_bak].[dbo].[gpcr_land] values(@id,@地块编号,@地块名称,@地块座落,@用地性质,
    @地块面积,     @出让年期 ,@出让底价 ,    @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
    @绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , @出让公告 ,@公告类型 ,
    @示意图,@成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 )


      update [tdxx_bak].[dbo].[land] set isexsit=0 where id=@id
    end
    fetch next from  STOCKORDER_CUR into @id,@地块编号,@地块名称,@地块座落,@用地性质,
    @地块面积,     @出让年期 ,@出让底价 ,    @起竞价 ,@容积率 ,@容积率数 ,@建筑面积 ,@建筑面积数  ,@建筑密度 ,
    @绿化率 ,@开发程度 ,@备注,@报价增幅 ,@起始时间 ,@终止时间 ,@公告文号 , 

    --拿掉这两个image字段

    --@出让公告 ,
    @公告类型 ,
    --@示意图,
    @成交与否,@成交价 ,@成交时间 ,@x ,@y ,@z , @jgxz ,@users ,@ip ,@sj ,@上报否 ,@产业门类 , @所属区 
    ENDclose STOCKORDER_CUR
    deallocate STOCKORDER_CUR试试看,你再改一下,我里面都注释了,再不行真远程你了!
      

  26.   

    其实想想不难啊,换个思路只要你一条数据有一个唯一的ID来标识,不就两image字段吗?怎么更新都可以了,完全可以再游标外面写个sql不要受这里的限于游标