【问题标题】:bcp Utility write to remote server?bcp 实用程序写入远程服务器?
【发布时间】:2015-12-05 14:10:43
【问题描述】:

根据一些建议,我使用bcp UtilitySQL server 表写入.cvs 文件,以便稍后将数据传输到具有相同结构的informix 表。

我的 SQLServer 存储过程:

ALTER PROCEDURE [dbo].[TestCVS]
AS
BEGIN
declare @sql nvarchar(4000)

select @sql = 'bcp "select * from ML..gmp4vacationbalance" queryout c:\ss\Tom.cvs -c -t, -T -S' + @@servername
exec master..xp_cmdshell @sql
END

我有四个关于这个程序的问题:

1-如何允许此过程写入remote server而不是本地服务器@@servername,因为允许特定服务器访问我的sql服务器是不安全的?

2-如何允许在特定条件下过滤查询: 说我想写这样的查询:

select * from ML..gmp4vacationbalance where balance_date = @date AND emp_num = @empNum

3-当我执行程序时,我会得到这样的数据:

为什么第三列出现这样的损坏,是varchar desc 写成arabic

4-当我想像这样用管道|而不是逗号,分隔时

select @sql = 'bcp "select * from ML..gmp4vacationbalance" queryout c:\ss\Tom.cvs -c -t| -T -S' + @@servername

我收到以下错误:

【问题讨论】:

  • 至少我会在远程服务器中运行 bcp 命令并从那里连接到 SQL Server。当您不必处理 xp_cmdshell 时,处理错误通常要简单得多。
  • 你需要逃跑 |因为它在命令行上有特殊含义,试试^|
  • @JamesZ : 你能在回答中解释更多吗

标签: sql sql-server informix bcp windows-server


【解决方案1】:

问题 1:从远程服务器写入

我假设您的意思是说 “来自” 而不是 “to”。以ServerName\InstanceName 的形式指定服务器名称,而不是使用@@servername,您将需要具有访问其他服务器的权限(因为您使用的是受信任的连接-T

问题2:如何在BCP语句中添加参数

BCP 是一个命令行实用程序,不是 Transact-SQL 的一部分。不能添加参数。您可以格式化执行的命令行。您必须将参数 @date@empNum 字符串与命令行的其余 SQL 字符串连接起来

问题 3:输出中的字符错误

使用-w 代替-c 来输出Unicode 字符

问题 4:管道不工作

BCP 的一个常见问题,只需像这样引用管道 -t"|" 以使其成为记录分隔符

【讨论】:

  • 非常感谢,您能否以重写我的整个命令为例说明您的四点答案
猜你喜欢
  • 2013-11-01
  • 2017-07-28
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2011-07-21
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多