2015-09-09 37 views
0

根據一些建議,我使用bcp Utility來編寫SQL server表到.cvs文件,所以我可以稍後將數據傳輸到具有相同結構的informix表。bcp實用程序寫入遠程服務器?

我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,當我執行的程序,我得到的數據是這樣的:

enter image description here

爲什麼第三列出現這樣的損壞,它的varchar desc寫在​​?

4時,我想通過管|而不是逗號,這樣

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

我收到以下錯誤界定:

enter image description here

+1

至少我會在遠程服務器中運行bcp命令並從那裏連接到SQL Server。當你不必處理xp_cmdshell時,處理錯誤通常要簡單得多。 –

+1

你需要逃避|因爲它在命令行上有特殊含義,請嘗試^ | –

+0

@詹姆斯:你能解釋更多的答案嗎 –

回答

1

問題1:從遠程寫服務器

我假設你的意思是說「從」不是「到」。指定形式ServerName\InstanceName,而不是使用@@servername服務器名稱,你需要有權限訪問其他服務器(因爲你正在使用受信任的連接-T

問題2:如何參數添加到BCP語句

BCP是不屬於Transact-SQL的命令行實用程序。你不能添加參數。您可以格式化執行的命令行。你必須讓你的參數@date@empNum字符串將它們連接起來與SQL字符串的其餘部分爲命令行

問題3:在輸出

代替-c使用-w錯誤的字符輸出的Unicode人物

問題4:管道不能正常工作

與BCP一個共同的問題,簡單地引用就像個管道是-t"|"使記錄分隔符

+0

非常感謝,你可以重寫我的整個命令作爲一個例子,澄清你的四點回答 –