BCP "SELECT TOP 10 * FROM TABLE_A" queryout D:\200901.txt -w -t\t -r\n -q -Sxxx.xxx.xxx.xxx -Uxx -Pxx 

解决方案 »

  1.   

    复杂一些的话.就这样DECLARE @cmd NVARCHAR(4000);
    SET @cmd = 'SELECT TOP 10 FROM TABLE_A' --在这里写你的SQL.EXEC('BCP "' + @cmd + '" queryout d:\200901.txt -w -t\t -r\n -q -Sxxx.xxx.xxx.xxx -Uxx -Pxx');
      

  2.   

    或者插入到一张临时表.再使用临时表..SELECT TOP 10 * 
    INTO ##tmp
    FROM TABLE_A;EXEC('BCP ##tmp out D:\200901.txt -t\t -r\n -q -Sxxx.xxx.xxx.xxx -Uxx -Pxx');
      

  3.   

    错了.不是EXEC..
    应该用xp_cmdshell去执行..
      

  4.   

    好像兰儿说的对,bcp必须用xp_cmdshell调用吧。
      

  5.   

    首先感谢大家...
    xp_cmdshell是需要高级权限的...我没有...呃...在BCP中执行动态SQL...可行吗?
      

  6.   

    或者插入到一张临时表.再使用临时表..SELECT TOP 10 * 
    INTO ##tmp
    FROM TABLE_A;
    然后在cmd下执行BCP就行BCP ##tmp out D:\200901.txt -t\t -r\n -q -Sxxx.xxx.xxx.xxx -Uxx -Pxx'
      

  7.   

    如果你想直接插入并生成文本文件,就要用bcpdeclare @sql varchar(8000),@tbname varchar(50)--首先将excel表内容导入到一个全局临时表
    select @tbname='[##temp'+cast(newid() as varchar(40))+']'
    ,@sql='select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8) 
    into '+@tbname+' from 
    opendatasource(''MICROSOFT.JET.OLEDB.4.0''
    ,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls''
    )...[Sheet1$]'
    exec(@sql)--然后用bcp从全局临时表导出到文本文件
    set @sql='bcp "'+@tbname+'" out "c:\aa.txt" /S"(local)" /P"" /c'
    exec master..xp_cmdshell @sql--删除临时表
    exec('drop table '+@tbname)