2013-03-27 58 views
2

當我使用像\\\twn-a110093\s$\SNData1.csv這樣的隱藏路徑時,它不起作用。使用BCP和隱藏路徑從SQL導出數據時出錯

錯誤消息:

[微軟] [SQL本機客戶端]無法打開BCP主數據文件

也許 '$' 字符無法識別?我該如何解決這個問題?

Exec master..xp_cmdshell 'bcp " select * from sfm.dbo.tblSNDataDetail " queryout "\\twn-a110093\s$\SNData1.csv" -c -t, -T -S TWN-SQL-01' 

回答

2

只要您不能將BCP數據直接傳送到UNC路徑,就會出現雙跳問題,您必須在2臺服務器之間設置約束委派。你需要做的是首先將BCP移到本地驅動器,然後將文件移動/複製到UNC路徑,實際上,它比直接將BCP路徑設置爲UNC路徑的速度快,即使您設置正確。相信與否,試試吧。

+0

有趣......如果進程在sql server服務帳戶下執行,爲什麼會出現雙跳問題? – Moho 2013-03-27 06:59:30

0

更可能的安全問題:

「使用xp_cmdshell催生了Windows進程具有相同的安全權限的SQL Server服務帳戶」

確保SQL Server服務帳戶的用戶可以訪問到那個路徑/文件。

+0

但我給「賬號:每個人」完全控制 – 2013-03-27 06:23:23

+0

在文件上?那隱藏分享的權限呢? – Moho 2013-03-27 06:42:01

+0

相同。它是「帳戶:每個人」完全控制。 – 2013-03-27 06:48:08

0

您在BCP命令中使用的是UNC路徑,實際上您可以直接在驅動器根S $上創建文件。這將涉及安全檢查。你可以嘗試是:

1.首先改變從驅動器的根文件夾的路徑,一個子文件像\twn-a110093\s$\Test\SNData1.csv

2.給SQL Server服務帳戶寫權限到文件夾「測試」,如果SQL Server在NT服務運行,那麼你需要給網絡服務帳戶寫入權限文件夾

3.如果「twn-a110093」不是SQl服務器所在的同一臺服務器,那麼在文件共享文件夾中,可能需要給「所有人」允許。

4.如果一切都不起作用,那麼先將BCP移出到本地文件夾,然後將robocopy文件移到UNC Path,就像@Guna所說的那樣,最好是直接寫入文件到UNC路徑,這是真的。

+0

使用路徑「\\ twn-a110093 \ share \ SNData1.csv」。它可以工作... – 2013-03-27 07:09:06

+1

好。但是請記住,直接寫入文件到UNC路徑比首先將文件寫入本地然後將文件複製到UNC路徑慢。 – ljh 2013-03-27 07:16:11