[SQL SERVER] FileIO操作 使用CLR

  • 2186
  • 0
  • 2014-07-26

[SQL SERVER] FileIO操作 使用CLR

目前舊系統大部分都是提供SP給其他系統介接,

新系統為了要讓其他系統變動幅度最小,

我衡量後決定走SP方式(雖然我原本要使用WebAPI),

舊系統有一段使用xp_cmdshell 來處理檔案搬移,

但我個人不愛使用xp_cmdshell,

對於外部資源存取我之前大多透過SQL CLR來處理,

這篇記錄一下權限問題(年紀大忘很快....)。

 

新增使用者函示

image

 

呼叫 .netframework File.copy

image

 

 

設定權限等級=外部

image

 

部屬發生沒有 PERMISSION_SET = EXTERNAL_ACCESS 的授權

image

 

資料庫開啟 TRUSTWORTHY 屬性(執行個體信任資料庫和內容)

alter database LeeDm set trustworthy on;

 

成功

image

ps:如果有遇到dbowner錯誤,可更改dbowner即可。

ALTER AUTHORIZATION ON DATABASE::[dbname] TO sa;

 

執行使用者定義函示

select dbo.UF_MoveFile
('E:\TDDD\IPZ-382\IPZ-382.wmv'
, 'F:\IPZ-382.wmv')

image

1.8GB檔案約花8秒,後面有空用SSIS看看可不可更快。

 

 

 

參考

 

TRUSTWORTHY 資料庫屬性

Deploy/Use assemblies which require Unsafe/External Access with CLR and T-SQL

Extending File System Operations in SQL Server Using CLR