SELECT * into tmptable FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source=d:\book1.xls;User ID=;Password=;Extended properties=Excel 5.0')...[Sheet1$]
这句话直接执行就没有问题,可是换成下面这种方式就报错:
declare @filename as varchar(100)
select @filename='d:\book1.xls'
SELECT * into tmptable FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source='+@filename+';User ID=;Password=;Extended properties=Excel 5.0')...[Sheet1$]
提示在+附近有语法错误///////////////////////////////
怎么解决呀?

解决方案 »

  1.   

    declare @filename as varchar(100)
    select @filename='d:\book1.xls'
    exec('SELECT * into tmptable FROM OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data Source='''+@filename+''';User ID=;Password=;Extended properties=Excel 5.0'')...[Sheet1$]')
      

  2.   

    我照你的作了,可是提示第一行:'d:'附近有语法错误。
    可是第一行是declare @filename as varchar(100)呀,没有d:呀?
      

  3.   

    declare @filename as varchar(100)
    select @filename='d:\book1.xls'
    exec('SELECT * into tmptable FROM OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data Source='+@filename+';User ID=;Password=;Extended properties=Excel 5.0'')...[Sheet1$]')--这样试试,应该是多了''
      

  4.   

    --是执行报错吧,trydeclare @filename as varchar(100)
    select @filename='d:\book1.xls'
    exec('SELECT * into tmptable FROM OpenDataSource(''Microsoft.Jet.OLEDB.4.0'',''Data Source='+@filename+';User ID=;Password=;Extended properties=Excel 5.0'')...[Sheet1$]')
      

  5.   

    declare @SQLStr varchar(1000)
    declare @filename as varchar(100)
    select @filename='d:\book1.xls'
    set @SQLStr='SELECT * into tmptable FROM OpenDataSource('''
    set @SQLStr=@SQLStr+'Microsoft.Jet.OLEDB.4.0'''
    set @SQLStr=@SQLStr+',''Data Source='
    set @SQLStr=@SQLStr+@filename+';User ID=;Password=;Extended properties=Excel 5.0'')'
    set @SQLStr=@SQLStr+'...[Sheet1$]'
    print @SQLStr
    exec (@SQLStr)
      

  6.   

    好了,多谢LouisXIV(夜游神)
    能把你的qq或者msn告诉我吗,要多多向你请教
      

  7.   

    我的qq:24400683
    msn:[email protected]
      

  8.   

    还有一个问题,也顺便在这里问了:
    就是我从一个表里把数据导入到别的表里:
    insert into t(aaa,bbb,ccc,ddd) select aaa,bbb,ccc from t1
    在t1表中没有ddd这个字段,我能不能这样写?
    insert into t(aaa,bbb,ccc,ddd) select aaa,bbb,ccc from t1,‘ddd’
      

  9.   

    ddd是个值还是列名?--如果是值
    insert into t(aaa,bbb,ccc,ddd) select aaa,bbb,ccc,'ddd' from t1
      

  10.   

    列名的话应该是另外表的列名吧,通过关联即可insert into t(aaa,bbb,ccc,ddd) select aaa,bbb,ccc,ddd from t1,t2 where 关联
      

  11.   

    哦,长知识了,多谢了,兄弟
    能够告诉我你的msn或者qq?
    平时多交流
      

  12.   

    CREATE procedure [dbo].[p_newid] 
    @id varchar(20),    --记录编号
    @t varchar(2),        --记录类型
    @jie varchar(2),     --记录属于第几届比赛
    @f varchar(20) output   --返回结果---新的记录编号
    as
       declare @tmpid varchar(20)
       set @tmpid=substring(@id,3,10) +1
       print @tmpid
       if len(@tmpid)=1 set @tmpid=@jie + @t + '000000000' + @tmpid
       if len(@tmpid)=2 set @tmpid=@jie + @t + '00000000' + @tmpid
       if len(@tmpid)=3 set @tmpid=@jie + @t + '0000000' + @tmpid
       if len(@tmpid)=4 set @tmpid=@jie + @t + '000000' + @tmpid
       if len(@tmpid)=5 set @tmpid=@jie + @t + '00000' + @tmpid
       if len(@tmpid)=6 set @tmpid=@jie + @t + '0000' + @tmpid
       if len(@tmpid)=7 set @tmpid=@jie + @t + '000' + @tmpid
       if len(@tmpid)=8 set @tmpid=@jie + @t + '00' + @tmpid
       if len(@tmpid)=9 set @tmpid=@jie + @t + '0' + @tmpid
       print @tmpid
      
     select @f=@tmpid
       return @f
    GO这个存储过程我调用的时候,
    declare @a
    p_newid '1T0000000006','T','2',@a
    提示 '1T0000000006' 附近有语法错误。
    还有就是返回值怎么返回呀?
      

  13.   

    可是要把@f varchar(20) output去掉的话,再调用就可以了,不知道是怎么回事?
    问的问题较多,麻烦你了,这是最后一个了,嘿嘿
      

  14.   

    1.
       declare @tmpid varchar(20)
       set @tmpid=substring(@id,3,10) +1
       print @tmpid
       if len(@tmpid)=1 set @tmpid=@jie + @t + '000000000' + @tmpid
       if len(@tmpid)=2 set @tmpid=@jie + @t + '00000000' + @tmpid
       if len(@tmpid)=3 set @tmpid=@jie + @t + '0000000' + @tmpid
       if len(@tmpid)=4 set @tmpid=@jie + @t + '000000' + @tmpid
       if len(@tmpid)=5 set @tmpid=@jie + @t + '00000' + @tmpid
       if len(@tmpid)=6 set @tmpid=@jie + @t + '0000' + @tmpid
       if len(@tmpid)=7 set @tmpid=@jie + @t + '000' + @tmpid
       if len(@tmpid)=8 set @tmpid=@jie + @t + '00' + @tmpid
       if len(@tmpid)=9 set @tmpid=@jie + @t + '0' + @tmpid
       print @tmpid
    太过罗嗦
       declare @tmpid varchar(20)
       set @tmpid=substring(@id,3,10) +1
       select @tmpid=@jie + @t + right('0000000000' + @tmpid,10)
    2.
    --try
    declare @a varchar(20)
    p_newid '1T0000000006','T','2',@a out
    select @a
      

  15.   

    第一个问题很好,确实要简洁多了
    第二个问题还是不行
    存储过程:
    CREATE procedure [dbo].[p_newid] 
    @id varchar(20),    --记录编号
    @t varchar(2),        --记录类型
    @jie varchar(2),     --记录属于第几届比赛
    @f varchar(20) output   --返回结果---新的记录编号
    as
       declare @tmpid varchar(20)
       set @tmpid=substring(@id,3,10) +1
       select @tmpid=@jie + @t + right('0000000000'+@tmpid,10)
       select @f=@tmpid
    GO然后按照你的调用:
    declare @a varchar(20)
    p_newid '1T0000000006','T','2',@a out
    select @a
    结果提示错误:
    服务器: 消息 170,级别 15,状态 1,行 18
    第 18 行: 'p_newid' 附近有语法错误。
    服务器: 消息 137,级别 15,状态 1,行 19
    必须声明变量 '@a'。
      

  16.   

    CREATE procedure [dbo].[p_newid] 
    @id varchar(20),    --记录编号
    @t varchar(2),        --记录类型
    @jie varchar(2),     --记录属于第几届比赛
    @f varchar(20) output   --返回结果---新的记录编号
    as
       declare @tmpid varchar(20)
       set @tmpid=substring(@id,3,10) +1
       select @tmpid=@jie + @t + right('0000000000'+@tmpid,10)
       select @f=@tmpid
    GOdeclare @a varchar(20)
    exec p_newid '1T0000000006','T','2',@a output
    select @a