SQL CLR用户定义函数中的C#支持程度?

时间:2010-08-31 19:59:27

标签: c# sql-server sql-server-2005 clr

这可能是天真的,但我无法得到任何确认:当我通过SQLCLR和C#SQL Server项目编写SQL函数时,SQL函数是否可以包含.NET BCL中的任何方法/类/命名空间?该功能可以做什么限制?我完全控制SQL Server及其托管操作系统,因此我可以修改该级别的安全设置。我对SQLCLR用户定义函数(SQL项目)中C#的语言支持更感兴趣。

我的最终代码部署将在SQL Server 2005和2008 R2(企业版)上。由于2008 R2在功能和支持方面将是2005年的发展,2005年是我的共同点,因此我对2005年的答案感兴趣。

由于

2 个答案:

答案 0 :(得分:2)

.NET版本取决于SQL Server版本:

  • 2005 = .NET v2.0
  • 2008 / R2 = .NET v3.5

它不能完全访问.NET - 限制基于external_access参数。有关详细信息,请参阅此链接:http://msdn.microsoft.com/en-us/library/ms345101.aspx

答案 1 :(得分:1)

它不能。您不能使用具有标记该类不安全的[HostProtection]属性的类。详细信息在此MSDN Library article中,其中包含不受限制的类列表。

这样一个类的经典示例是TimeZoneInfo,它会加载一个非托管DLL,如果查询中止,它将不会被卸载。

[HostProtection(SecurityAction.LinkDemand, MayLeakOnAbort=true)]
public sealed class TimeZoneInfo : IEquatable<TimeZoneInfo>, ISerializable, IDeserializationCallback
{
  // etc...
}