set @str = 'BULK INSERT table FROM '+@filename +'WITH (DATAFILETYPE = ''char'',RowTerminator = ''\n'',FieldTerminator = ''|'')'

解决方案 »

  1.   

    试试这个,把'换成'':declare @str varchar(500)
    set @str = 'BULK INSERT table FROM ' + @filename + ' WITH (DATAFILETYPE = ''char'',RowTerminator = ''\n'',FieldTerminator = ''|'')'
    exec(@str)
      

  2.   

    在with前再加一个空格
    char的两边不是双引号,是两个单引号
      

  3.   

    一看题目,我也以为是哪位想通过sqlserver来写诗的朋友有问题。
    这个问题很简单,sqlserver中的转义字符就是把要转义的字符写两遍,这时vb这一系列的语言的共有特点。
      

  4.   

    应该不会有问题啊,记得在文件名两边也加上引号:
    给你个完整的例子吧create table tablea
    (a char(10) primary key,
     b char(10),
     c char(10)
    )a.txt文件内容:
    a|b|c
    d|e|f然后执行
    declare @str varchar(500),
           @filename varchar(10)
    set @filename = '''d:\a.txt'''
    set @str = 'BULK INSERT tablea FROM ' + @filename 
                + ' WITH (DATAFILETYPE = ''char'',RowTerminator = ''\n'',FieldTerminator = ''|'')'
    print @str
    exec(@str)
      

  5.   

    肯定能,bluepower2008(蓝色力量) 说的很对。如果你的bulk语句能通过的话,
    你改成@str='',再exec。只要你将单引号重写之后一定能通过。
      

  6.   

    就是这样一个例子,但在编译时sql不能识别文件
    它所得到的是aaa.txt而不是'aaa.txt'
    这用print便知。下面是我的proc,大家指点一下吧.
    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GO/*1。创建各个临时数据表*/
    /*3。统计下载数和访问数*/
    ALTER             proc tstj_first
    @threadid varchar(4)        --输入参数,线程号;
    AS 
    begin
        DECLARE @childfilename varchar(200)
        DECLARE @getdatafromtxt varchar(200)
    --创建游标childfile_cur得到子文件名
        DECLARE childfile_cur SCROLL CURSOR FOR SELECT 子文件名 FROM tstjreport where 线程号=@threadid
    --打开游标
        OPEN childfile_cur
        FETCH NEXT FROM childfile_cur 
        --WHILE @@FETCH_STATUS = 0
        --BEGIN
          print @childfilename
          --创建临时数据表;
          CREATE TABLE yd_xz (
            文件路径  varchar(50) NULL,
            用户动作   varchar(3) NULL,
            统计顺序  smallint DEFAULT 0 NULL
          )
          
          CREATE TABLE fw_count (
            文件路径 varchar(50) NULL,
            访问数 int NULL,
            统计顺序  smallint DEFAULT 0 NULL
          )      CREATE TABLE xz_count (
            文件路径 varchar(50) NULL,
            下载数 int NULL,
            统计顺序  smallint DEFAULT 0 NULL
          )
          
          CREATE TABLE ydxz_count (
            文件路径 varchar(50) NULL,
            下载数 int NULL,
            访问数 int NULL,
            统计顺序  smallint DEFAULT 0 NULL
          )
          --从文本中提取数据;
          set @getdatafromtxt =  'BULK INSERT yd_xz FROM '+ @childfilename + 'WITH (DATAFILETYPE = ''char'',RowTerminator = ''\n'',FieldTerminator =''|'')'
          print @getdatafromtxt
          exec(@getdatafromtxt)
          --统计下载数;
          
          --统计访问数;
          --统计下载数;
          --删除临时表;
          --drop table yd_xz
          drop table fw_count
          drop table xz_count 
          drop table ydxz_count  
          
      --    FETCH NEXT FROM childfile_cur into @childfilename
    --    END    CLOSE childfile_cur    /*CREATE TABLE yd_xz (
            文件路径  varchar(50) NULL,
            用户动作   vachar(3) NULL,
            统计顺序  smallint DEFAULT 0 NULL
        )    CREATE TABLE fy_count (
        文件路径 varchar(50) NULL,
        访问数 int NULL,
        统计顺序  smallint DEFAULT 0 NULL
        )    CREATE TABLE xz_count (
         文件路径 varchar(50) NULL,
         下载数 int NULL,
         统计顺序  smallint DEFAULT 0 NULL
        )    CREATE TABLE ydxz_count (
          文件路径 varchar(50) NULL,
          下载数 int NULL,
          访问数 int NULL,
          统计顺序  smallint DEFAULT 0 NULL
        )
        --统计下载数和访问数
        insert into  ydxz_count (文件路径,下载数,访问数,统计顺序) 
        select [xz_count].[文件路径],[xz_count].[下载数],[fy_count].[访问数],[xz_count].[统计顺序]
        from xz_count,fy_count where [fy_count].[文件路径]=[xz_count].[文件路径];*/
    endGO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO
      

  7.   

    上面的'bulk insert 表 from .txt with '是有空格的.
      

  8.   

    这个问题你的做法是错误的.
    应该这样:
    set @filename = 'd:\a.txt'
    set @str = 'BULK INSERT tablea FROM ''' + @filename 
                + ''' WITH (DATAFILETYPE = ''char'',RowTerminator = ''\n'',FieldTerminator = ''|'')'把单引号放到from 后面,不要放到@filename参数中.
      

  9.   

    干脆就來這個:SET QUOTED_IDENTIFIER OFF
    declare @str varchar(500)
    set @str = "BULK INSERT table FROM @filename WITH (DATAFILETYPE = 'char',RowTerminator = '\n',FieldTerminator = '|')
    "exec(@str)