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

Sql server 在远程服务器中执行BCP命令,sql-server,Sql Server,在远程服务器中执行BCP命令时遇到问题 我在一个批处理文件中有以下命令,它执行一个脚本文件。 脚本文件处理临时表,并将临时表中的记录写入文件 SQLCMD -SQA_Server236 -dtestdb -Usa -PPassword1 -i"D:\script\Writing to Files\Write to CSV.sql" -o"D:\script\script_logs.log" --脚本文件包含 declare @table NVARCHAR(255) declare

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

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

SQLCMD -SQA_Server236 -dtestdb -Usa -PPassword1  -i"D:\script\Writing to Files\Write to CSV.sql" -o"D:\script\script_logs.log"
--脚本文件包含

declare @table    NVARCHAR(255)  
declare @filename VARCHAR(100)  
set @filename='C:\TextFile\abcd.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…”的方式执行此操作)


希望这有帮助