[SQL SERVER] FileIO操作 使用CLR
目前舊系統大部分都是提供SP給其他系統介接,
新系統為了要讓其他系統變動幅度最小,
我衡量後決定走SP方式(雖然我原本要使用WebAPI),
舊系統有一段使用xp_cmdshell 來處理檔案搬移,
但我個人不愛使用xp_cmdshell,
對於外部資源存取我之前大多透過SQL CLR來處理,
這篇記錄一下權限問題(年紀大忘很快....)。
新增使用者函示
呼叫 .netframework File.copy
設定權限等級=外部
部屬發生沒有 PERMISSION_SET = EXTERNAL_ACCESS 的授權
資料庫開啟 TRUSTWORTHY 屬性(執行個體信任資料庫和內容)
alter database LeeDm set trustworthy on;
成功
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')
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