Sql server 在远程服务器中执行BCP命令
在远程服务器中执行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
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…”的方式执行此操作)
希望这有帮助