在远程服务器中执行 BCP 命令



>我在远程服务器中执行 BCP 命令时遇到问题。

我在执行脚本文件的批处理文件中有以下命令。脚本文件处理临时表,并将临时表中的记录写入文件。

SQLCMD -SQA_Server236 -dtestdb -Usa -PPassword1  -i"D:scriptWriting to FilesWrite to CSV.sql" -o"D:scriptscript_logs.log"
-

-脚本文件包含...

declare @table    NVARCHAR(255)  
declare @filename VARCHAR(100)  
set @filename='C:TextFileabcd.csv'
set @table ='##Indexes_Add'


  IF OBJECT_ID('tempdb..#Indexes_Add') IS NOT NULL
    BEGIN
    DROP TABLE ##Indexes_Add
    END 

 CREATE TABLE  ##Indexes_Add
(
    id int IDENTITY(1,1) PRIMARY KEY,
    alter_command NVARCHAR(MAX),
    successfully_readded BIT NULL,
 )
  insert into ##Indexes_Add select 'a',0
  insert into ##Indexes_Add select 'a',0
  SET NOCOUNT ON;
  IF OBJECT_ID('tempdb..'+@table) IS NOT NULL
  BEGIN
    DECLARE 
        @sql NVARCHAR(MAX), 
        @cols NVARCHAR(MAX) = N'';

       SELECT @cols += ',' + name
      FROM tempdb.sys.columns
      WHERE [object_id] = OBJECT_ID('tempdb..'+@table)
      ORDER BY column_id;


    SELECT @cols = STUFF(@cols, 1, 1, '');


    SET @sql = N'EXEC master..xp_cmdshell ''bcp "SELECT ''''' 
        + REPLACE(@cols, ',', ''''',''''') + ''''' UNION ALL SELECT ' 
        + 'RTRIM(' + REPLACE(@cols, ',', '),RTRIM(') + ') FROM ' 
       + 'tempdb.dbo.'+@table + '" queryout "' + @filename + '" -c -t, -SQA_Server236 -Usa -PPassword1''';  

  EXEC sp_executesql @sql;
    print @sql
    END

我的问题-:

当我在批处理文件中运行上述批处理命令并给我的本地服务器而不是服务器名称"QA_Server236"时,我正在获得在我的系统中创建的文件"abcd.csv",但是当我将服务器名称称为"QA_Server236"时,该文件是在远程机器中创建的,即QA_Server236。但是我希望在我的系统中创建文件,如果给定的服务器是远程服务器,请说"QA_Server236"

任何人都可以在这个问题上帮助我。 我没有任何方法可以这样做。

如果我

是对的,BCP 不允许将结果集和/或日志保存到远程计算机。但是您可以尝试将远程PC上的文件夹挂载到本地计算机上的共享文件夹中,并在那里设置输出位置,或者尝试使用网络路径"\[YOURPC]...."。

由于我不确定它是否有效(实际上,我认为它不会),这是我能想到的唯一解决方案:在您的批处理中添加一行,在 BCP 完成后将文件从远程计算机移动到您的 PC(xcopy 或类似)(批量执行此操作为"调用 bcp.exe [params]"而不仅仅是"bcp.exe...")


希望这有帮助!

最新更新