@diannao varchar(100), @biaoming varchar(30)/*@diannao 电脑名和路径 @biaoming accesss表名
    */
As declare @sql varchar(256)
    set @sql='insert into  OPENROWSET
('+ '''Microsoft.Jet.OLEDB.4.0'',''' + @diannao + ''';'+'''admin'';'+''''',' + @biaoming+')
(编码,商品名称)
select 编码,商品名称 from b编码
where  b编码.编码 NOT IN (select 编码  from OPENROWSET
('+ '''Microsoft.Jet.OLEDB.4.0'',''' + @diannao + ''';'+'''admin'';'+''''',' + @biaoming+')'execute (@sql)错误:unclosed quotation  before the characfer string ''.
  

解决方案 »

  1.   

    规范的openrowset写法是
    select * from openrowset('Microsoft.Jet.OLEDB.4.0','C:\ACC.MDB';'Admin';'',a)你对照一下.
    在执行前将@sql打出来,看一下替换结果.使用变量替换的sql语句经常会有引号,括号不对应的事.
      

  2.   

    set @sql='insert into  OPENROWSE(''Microsoft.Jet.OLEDB.4.0'',''' + @diannao + ''';''admin'';'''','+ @biaoming+')'
    这样应该可以的!你可以试验
      

  3.   

    各位,我的语句可以运行,但加上了下面的条件后出现
    错误:unclosed quotation  before the characfer string ''.
    where  b编码.编码 NOT IN (select 编码  from OPENROWSET
    ('+ '''Microsoft.Jet.OLEDB.4.0'',''' + @diannao + ''';'+'''admin'';'+''''',' + @biaoming+')'麻烦各位分析一下。
      

  4.   

    declare @sql nvarchar(1000),@diannao varchar(10), @biaoming varchar(10)
    select  @diannao='1',@biaoming='2'
    set @sql='insert into  
    OPENROWSE(''Microsoft.Jet.OLEDB.4.0'',''' + @diannao + ''';''admin'';'''','+ @biaoming+')(编码,商品名称)
    select 编码,商品名称 from b编码
    where  b编码.编码 NOT IN (select 编码  from 
    OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''' + @diannao + ''';''admin'';'''','+ @biaoming+')'
    select @sql
    你可以试验看看如何!
      

  5.   

    ''' 太麻烦了,可不可以用char(39) 来生成单引号
      

  6.   

    这个好像不对!应该把第一个OPENROWSE改为OPENROWSET,还要在最后加一个')'下面的可以!我已经试验过了!
    declare @sql nvarchar(1000),@diannao varchar(10), @biaoming varchar(10)
    select  @diannao='1',@biaoming='2'
    set @sql='insert into  
    OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''' + @diannao + ''';''admin'';'''','+ @biaoming+')(编码,商品名称)
    select 编码,商品名称 from b编码
    where  b编码.编码 NOT IN (select 编码  from 
    OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''' + @diannao + ''';''admin'';'''','+ @biaoming+'))'
    select @sql
    你可以试验看看如何! 
    这是我的一个成功的离子:
    declare @sql1 varchar(1000),@sql2 varchar(1000),@diannao varchar(300), @biaoming varchar(100)
    select  @diannao='C:\Biblio.mdb',@biaoming='authors'
    set @sql1='insert into  OPENROWSEt(''Microsoft.Jet.OLEDB.4.0'',''' + @diannao + ''';''admin'';'''','+ @biaoming+')(Au_ID)'
    select @sql2=' select a from kk where  kk.a NOT IN (select Au_ID  from  OPENROWSET(''Microsoft.Jet.OLEDB.4.0'',''' + @diannao + ''';''admin'';'''','+ @biaoming+'))'
    你要先建一个表
    create table kk(a int)
    文件的路径你自己写好了
      

  7.   

    我要结束了。wwl007(疑难杂症)正确。 
    最后问一下,你们在处理sql7.0和access之间的数据时用什么方法?
    我上面的方法有什么缺点或优点?
      

  8.   

    wwl007(疑难杂症):能帮我写一个更新例句吗?
    assess  表名:编码
     编码  商品名称 录入时间
    sql7.0 表名:b编码
      编码 商品名称 录入时间
    如果 b编码.录入时间<>编码.录入时间
    则用sql7.0的编码 商品名称  录入时间 的值 更新 access 编码  商品名称 录入时间 的值 
       
      

  9.   

    :能帮我写一个更新例句吗?
    assess  表名:编码
     编码  商品名称 录入时间
    sql7.0 表名:b编码
      编码 商品名称 录入时间
    如果 b编码.录入时间<>编码.录入时间
    则用sql7.0的编码 商品名称  录入时间 的值 更新 access 编码  商品名称 录入时间 的值