在MSSQL Server 2008中创建可以访问外部资源的DLL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE ASSEMBLY [CharSetUtil]
FROM 'XXX.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
GO

ALTER DATABASE [somedb] set TRUSTWORTHY on
EXEC sp_changedbowner 'sa'

USE somedb
GRANT EXTERNAL ACCESS ASSEMBLY TO sa

exec sp_configure 'show advanced options', '1';
reconfigure;
go

exec sp_configure 'clr enabled', '1'
go

reconfigure;
exec sp_configure 'show advanced options', '1';
go

编写clr函数注意:

  1. 静态类型static修饰的函数
  2. 如果函数内部不执行sql查询,应定义DataAccessKind.None
  3. 最好定义IsDeterministic = true。但如果是DataAccessKind.READ,定义确定性函数也是没有用的。