不知怎麼換 BULK INSERT 的執行身分

SQL Server 2005 後執行 BULK INSERT 語法,若是以 Windows Login 登入,SQL Server 會模擬該 Windows 帳號存取 File,若是 SQL Server 自建帳號,則會以 SQL Server 服務帳號存取 File。因此,若該 Windows 帳號無法存取 File 會有錯誤:

bulk insert t from ‘c:tempa.txt’

訊息 4861, 層級 16, 狀態 1, 伺服器 WIN2K3R2, 行 1
無法大量載入,因為檔案 "c:tempa.txt" 無法開啟。作業系統錯誤碼 5(存取被拒。)。

不管我用 exec as login、login 配認證(credential)、將 windows login 加入到 bulkadmin 伺服器角色(BOL 建議的)都沒用。

最後,只好用 xp_cmdshell 搭配 bcp…

–xp_cmdshell 將使用以下的Windows帳號當作認證(credential)來執行 console 的 AP

EXEC sp_xp_cmdshell_proxy_account ‘domainadministrator’, ‘password’

create proc spBCP

as

exec sp_configure ‘show adv’,1

reconfigure

exec sp_configure ‘xp_cmdshell’,1

reconfigure

exec xp_cmdshell ‘bcp tempdb.dbo.t in "C:tempa.txt" -T -c’

exec sp_configure ‘xp_cmdshell’,0

reconfigure

exec sp_configure ‘show adv’,0

reconfigure

go

 

不知誰有更好的方法…

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: