代码是一位大侠提供的,老是提示
服务器: 消息 137,级别 15,状态 2,行 54
必须声明变量 '@'。go
if object_id('SHSFXQXXHWYHCARD..C') is not null
   drop table C
go
create table C(a5 varchar(20),b5 varchar(20))
insert into C(a5,b5) values('ZWW-XJG','1-040901')
insert into C(a5,b5) values('ZWW-JF','1-040901')
insert into C(a5,b5) values('ZWW-NTPC','1-040901')
insert into C(a5,b5) values('ZWW-PC','1-040901')
insert into C(a5,b5) values('ZSW04','1-050401')
insert into C(a5,b5) values('ZSW05','1-050401')
insert into C(a5,b5) values('ZWW-YBY','1-050602')
insert into C(a5,b5) values('ZWW-JCYYW','1-050603')
insert into C(a5,b5) values('GWW-JCYYW','2-050603')
insert into C(a5,b5) values('ZWW-GDW','1-050704')
insert into C(a5,b5) values('GWW-GDW','2-050704')
insert into C(a5,b5) values('ZWW-VOD','1-050805')
insert into C(a5,b5) values('ZWW-RMFY','1-050906')
insert into C(a5,b5) values('MHWZ','3-051007')
insert into C(a5,b5) values('ZWW-DZYZ-001','1-051008')
insert into C(a5,b5) values('ZWW-SWJIT','1-060401')
insert into C(a5,b5) values('ZWW-YJZH','1-060402')
insert into C(a5,b5) values('ZWW-JYC','1-060403')
insert into C(a5,b5) values('ZWW-GIS','1-060504')
insert into C(a5,b5) values('ZWW-CXW','1-060505')
insert into C(a5,b5) values('ZWW-JSWFW','1-060506')
insert into C(a5,b5) values('ZWW-JG','1-060709')
insert into C(a5,b5) values('ZWW-RDZXTA','1-060811')
insert into C(a5,b5) values('ZZBXXGLXT','1-060812')
insert into C(a5,b5) values('ZWW-JCYDA','1-060813')
insert into C(a5,b5) values('ZWW-WZBWZ','1-061116')
insert into C(a5,b5) values('ZWW-YJSJ','1-061121')
insert into C(a5,b5) values('ZWW-DZYZ-003','1-061122')
insert into C(a5,b5) values('ZWW-FBDRJ','1-061223')
insert into C(a5,b5) values('ZWW-ZBRJ','1-060324')
insert into C(a5,b5) values('ZWW-SFJ-002','1-061025')
go
if object_id('SHSFXQXXHWYHCARD..D') is not null
   drop table D
go
select id = identity(int,1,1) , * into D from FA_Kp
declare @count as int
select @count = count(*) from D
declare @i as int
set @i = 1
declare @s2 as varchar(20)
declare @s3 as varchar(20)
declare @s4 as varchar(50)
declare @s5 as varchar(30)
declare @s6 as varchar(40)
declare @s7 as numeric(9)
declare @s8 as varchar(60)
declare @s9 as varchar(40)
declare @a as varchar(20)
declare @b as numeric(9)
declare @c as numeric(20)
declare @d as varchar(200)
while @i <= @count
 begin
  set @s2 = null
  set @s3 = null
  set @s4 = null
  set @s5 = null
  set @s6 = null
  set @s7 = null
  set @s8 = null
  set @s9 = null
  set @a = null
  set @b = null
  set @c = null
  set @d = null
  if @i<=83 set @s2='1-040901'
  else
    begin
    select @s2 = C.b5 from D,C where D.id = @i and D.a5 = C.a5
    end
  select @s3 = max(serialcode) from test070409 where left(serialcode,8) = @s2
  if @s3 is null or len(rtrim(@s3)) = 0 set @s3 = '001'
  else
    begin
    set @s3 = right('000' + cast(cast(right(@s3,3) as int) + 1 as varchar),3)
    end
  select @s4 = gdmc from D where id = @i
  select @s5 = lbmc from D where id = @i
  select @s6 = gdgg from D where id = @i
  select @s7 = ksrq from D where id = @i
  set @s7=cast(@s7 as char)
  select @s8 = bmmc from D where id = @i
  select @s9 = sybm from D where id = @i
  select @a = zkmc from D where id = @i
  select @b = yz from D where id = @i
  select @c = jz from D where id = @i
  select @d = gd1 from D where id = @i
  insert into test070409(serialcode,assetsname,assetssortcode,assetsstandard,assetsusedate,assetslayadd,assetsdept,usestate,assetsprice,leftprice,res) values(@s2 + '-' + @s3,@s4,@s5,@s6,@s7,@s8,@,s9,@a,@b,@c,@d)
  set @i = @i + 1
endselect * from test070409drop table FA_Kp,test070409,C,D

解决方案 »

  1.   

    @s3,@s4,@s5,@s6,@s7,@s8,@,s9,@a,@b,@c,@d)
      set @i = @i + 1
    endselect * from test070409drop table FA_Kp,test070409,C,D
      

  2.   


    select id = identity(int,1,1) , * into D from FA_Kp
    declare @count as int
    select @count = count(*) from D
    declare @i as int
    set @i = 1
    declare @s2 as varchar(20)
    declare @s3 as varchar(20)
    declare @s4 as varchar(50)
    declare @s5 as varchar(30)
    declare @s6 as varchar(40)
    declare @s7 as numeric(9)
    declare @s8 as varchar(60)
    declare @s9 as varchar(40)
    declare @a as varchar(20)
    declare @b as numeric(9)
    declare @c as numeric(20)
    declare @d as varchar(200)
    while @i <= @count
     begin
      set @s2 = null
      set @s3 = null
      set @s4 = null
      set @s5 = null
      set @s6 = null
      set @s7 = null
      set @s8 = null
      set @s9 = null
      set @a = null
      set @b = null
      set @c = null
      set @d = null
      if @i<=83 set @s2='1-040901'
      else
        begin
        select @s2 = C.b5 from D,C where D.id = @i and D.a5 = C.a5
        end
      select @s3 = max(serialcode) from test070409 where left(serialcode,8) = @s2
      if @s3 is null or len(rtrim(@s3)) = 0 set @s3 = '001'
      else
        begin
        set @s3 = right('000' + cast(cast(right(@s3,3) as int) + 1 as varchar),3)
        end
      select @s4 = gdmc from D where id = @i
      select @s5 = lbmc from D where id = @i
      select @s6 = gdgg from D where id = @i
      select @s7 = ksrq from D where id = @i
      set @s7=cast(@s7 as char)
      select @s8 = bmmc from D where id = @i
      select @s9 = sybm from D where id = @i
      select @a = zkmc from D where id = @i
      select @b = yz from D where id = @i
      select @c = jz from D where id = @i
      select @d = gd1 from D where id = @i
      insert into test070409(serialcode,assetsname,assetssortcode,assetsstandard,assetsusedate,assetslayadd,assetsdept,usestate,assetsprice,leftprice,res) values(@s2 + '-' +@s3,@s4,@s5,@s6,@s7,@s8,@s9,@a,@b,@c,@d)
      set @i = @i + 1
    endselect * from test070409
      

  3.   

    insert into test070409(serialcode,assetsname,assetssortcode,assetsstandard,assetsusedate,assetslayadd,assetsdept,usestate,assetsprice,leftprice,res) 
    values(@s2 + '-' + @s3,@s4,@s5,@s6,@s7,@s8,@,s9   --这里,多写了一个,
    ,@a,@b,@c,@d)
      set @i = @i + 1
    end
      

  4.   

    @s3,@s4,@s5,@s6,@s7,@s8,@,s9,@a,@b,@c,@d)
    这一段的@,s9中间多了一个,
    @s9去掉,符号
      

  5.   

    values(@s2 + '-' + @s3,@s4,@s5,@s6,@s7,@s8,@,s9   --这里,多写了一个逗号,去掉即可
    ,@a,@b,@c,@d)
      set @i = @i + 1