你这句不对set @sql=N'insert into ['+ @tblname+'] (dwmc,jg,lxr,hy,jyfw,jj,zcrq,ss,dwdz,tel,zczj,rs) values (@dwmc,@jg,@lxr,@hy,@jyfw,@jj,@zcrq,@ss,@dwdz,@tel,@zczj,@rs)'应该是
set @sql=N'insert into ['+ @tblname+'] (dwmc,jg,lxr,hy,jyfw,jj,zcrq,ss,dwdz,tel,zczj,rs) values ('+@dwmc+','+@jg+','+@lxr+','+@hy+','+@jyfw+','+@jj+','+@zcrq+','+@ss+','+@dwdz+','+@tel+','+@zczj+','+@rs+')'

解决方案 »

  1.   

    在字符串中的变量应该这样写的:
    set @sql='select * from tablename where name='+ @name
    正于你上面使用的变量@tblname一样.
      

  2.   


    按二楼改了出现:以下错误
    列名 'dwmc' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'jg' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'lxr' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'hy' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'jyfw' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'jj' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'zcrq' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'ss' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'dwdz' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'tel' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'zczj' 无效。
    服务器: 消息 207,级别 16,状态 1,过程 process,行 6
    列名 'rs' 无效。
      

  3.   

    这样改如何?
    CREATE PROCEDURE process
    as 
    begin
    declare @dwmc nvarchar(50),@jg nvarchar(50),@lxr nvarchar(50),@hy nvarchar(50),@jyfw nvarchar(100),@jj nvarchar(50),@zcrq nvarchar(50),@ss nvarchar(50),@dwdz nvarchar(100),@tel nvarchar(50),@zczj nvarchar(50),@rs nvarchar(50),@tblname nvarchar(50),@num int,@sql nvarchar(100)
    declare cs_a cursor for select dwmc,jg,lxr,hy,jyfw,jj,zcrq,ss,dwdz,tel,zczj,rs from guang
    open cs_a

      

  4.   

    或者把@dwmc换个名字改成@dwmc1,相关地方也改一下
      

  5.   

    你在exec 那句sql的前面 加上print @sql看看你拼出来的sql语句对不对,不对的话,再按照语法去修改啊
      

  6.   

    try:
    ---------------------------------------------------------------------
    CREATE PROCEDURE process
    as 
    begin
        declare cs_a cursor for select dwmc,jg,lxr,hy,jyfw,jj,zcrq,ss,dwdz,tel,zczj,rs from guang
        open cs_a
        
        declare @dwmc nvarchar(50),@jg nvarchar(50),@lxr nvarchar(50),@hy nvarchar(50),@jyfw nvarchar(100),@jj nvarchar(50),@zcrq nvarchar(50),@ss nvarchar(50),@dwdz nvarchar(100),@tel nvarchar(50),@zczj nvarchar(50),@rs nvarchar(50),@tblname nvarchar(50),@num int,@sql nvarchar(100)
        set @num=0
        FETCH NEXT FROM cs_a INTO @dwmc,@jg,@lxr,@hy,@jyfw,@jj,@zcrq,@ss,@dwdz,@tel,@zczj,@rs
        WHILE @@FETCH_STATUS = 0
        BEGIN
            if (len(@ss)>=6) 
            begin
                set @tblname=left(@ss,4)
                
                set @sql=N'insert into ['+ @tblname+'] (dwmc,jg,lxr,hy,jyfw,jj,zcrq,ss,dwdz,tel,zczj,rs) values (@dwmc,@jg,@lxr,@hy,@jyfw,@jj,@zcrq,@ss,@dwdz,@tel,@zczj,@rs)'
                
                exec sp_executesql @sql,
                                   N'@dwmc nvarchar(50),@jg nvarchar(50),@lxr nvarchar(50),@hy nvarchar(50),@jyfw nvarchar(100),@jj nvarchar(50),@zcrq nvarchar(50),@ss nvarchar(50),@dwdz nvarchar(100),@tel nvarchar(50),@zczj nvarchar(50),@rs nvarchar(50)',
                                   @dwmc,@jg,@lxr,@hy,@jyfw,@jj,@zcrq,@ss,@dwdz,@tel,@zczj,@rs
                                   
                set @num=@num+1
            end
            
            FETCH NEXT FROM cs_a INTO @dwmc,@jg,@lxr,@hy,@jyfw,@jj,@zcrq,@ss,@dwdz,@tel,@zczj,@rs
        END
        print @num
        
        CLOSE cs_a
        DEALLOCATE cs_a
    end
    GO
      

  7.   

    CREATE PROCEDURE process
    as 
    declare @dwmc nvarchar(50),@jg nvarchar(50),@lxr nvarchar(50),@hy nvarchar(50),@jyfw nvarchar(100),@jj nvarchar(50),@zcrq nvarchar(50),@ss nvarchar(50),@dwdz nvarchar(100),@tel nvarchar(50),@zczj nvarchar(50),@rs nvarchar(50),@tblname nvarchar(50),@num int,@sql nvarchar(1000)
    begindeclare cs_a cursor for select dwmc,jg,lxr,hy,jyfw,jj,zcrq,ss,dwdz,tel,zczj,rs from guang
    open cs_a


    set @num=0
    FETCH NEXT FROM cs_a INTO @dwmc,@jg,@lxr,@hy,@jyfw,@jj,@zcrq,@ss,@dwdz,@tel,@zczj,@rs
    WHILE @@FETCH_STATUS = 0
    BEGIN

    if (len(@ss)>=6) 
    begin
    set @tblname=left(@ss,4)

    set @sql=N'insert into ['+ @tblname+'] (dwmc,jg,lxr,hy,jyfw,jj,zcrq,ss,dwdz,tel,zczj,rs) values ('+@dwmc+','+@jg+','+@lxr+','+@hy+','+@jyfw+','+@jj+','+@zcrq+','+@ss+','+@dwdz+','+@tel+','+@zczj+','+@rs+')' exec sp_executesql  @sql
    set @num=@num+1
    end
      
         FETCH NEXT FROM cs_a INTO @dwmc,@jg,@lxr,@hy,@jyfw,@jj,@zcrq,@ss,@dwdz,@tel,@zczj,@rs
    END
    print @num  CLOSE cs_a
        DEALLOCATE cs_a
    end
    GO