2014-04-02 92 views
0

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

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

SQLCMD -SQA_Server236 -dtestdb -Usa -PPassword1 -i"D:\script\Writing to Files\Write to CSV.sql" -o"D:\script\script_logs.log" 

--script文件包含...

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..'[email protected]) 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..'[email protected]) 
     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.'[email protected] + '" queryout "' + @filename + '" -c -t, -SQA_Server236 -Usa -PPassword1'''; 



    EXEC sp_executesql @sql; 
    print @sql 

    END 

我problem-:

当我运行一个批处理文件上面的批处理命令,我给我的不是服务器等本地服务器名称为“QA_Server236”,我得到在我的系统中创建的文件“abcd.csv”,但是当我将服务器名称设置为“QA_Server236”时,该文件在远程机器即QA_Server236中创建。但我想要在我的系统中创建文件,如果给定的服务器是远程服务器说“QA_Server236”

任何人都可以帮助我解决这个问题。我没有得到任何方法来这样做。

+0

请帮忙吗? – Axs

回答

0

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

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


希望这有助于!

相关问题