Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sql Server 2005上的CLR代码存在问题_C#_Sql Server_Sql Server 2005_Sqlclr - Fatal编程技术网

C# Sql Server 2005上的CLR代码存在问题

C# Sql Server 2005上的CLR代码存在问题,c#,sql-server,sql-server-2005,sqlclr,C#,Sql Server,Sql Server 2005,Sqlclr,我正在考虑从SQLServer2005中的UDF访问一些CLR代码 我听说CLR代码中抛出的未经处理的异常会导致服务器停机 显然,我的函数将包含一个try-catch块。但是,某些异常stackoverflow可能会跳过捕获 是否有人制定了一套指导原则,可以完全消除或最小化CLR代码导致服务器停机的风险。该代码的作用是什么 我建议你在不使用CLR的前提下,通过完全实现你的目标来避免风险,而不是使用一种你知道的技术,它可能会增加耦合和复杂性,并且完全不可移植。但是如果我不知道问题是什么,或者你是否

我正在考虑从SQLServer2005中的UDF访问一些CLR代码


我听说CLR代码中抛出的未经处理的异常会导致服务器停机

显然,我的函数将包含一个try-catch块。但是,某些异常stackoverflow可能会跳过捕获

是否有人制定了一套指导原则,可以完全消除或最小化CLR代码导致服务器停机的风险。

该代码的作用是什么


我建议你在不使用CLR的前提下,通过完全实现你的目标来避免风险,而不是使用一种你知道的技术,它可能会增加耦合和复杂性,并且完全不可移植。但是如果我不知道问题是什么,或者你是否真的需要CLR,我不能推荐任何东西。

我强烈建议禁止使用CLR函数进行并行查询的能力。您的里程数可能会有所不同,但我发现这可以消除我的一些SQL引擎错误


未处理的异常对SQL Server有不利影响,但其不利程度取决于引发的异常的严重程度

一般来说,您使用受约束的执行区域来指示代码失败时可能影响的范围进程、应用程序域、线程等。SQL Server使用此选项来确定是否仅中止当前查询/请求,或者在出现更严重错误时继续执行

MSDN杂志上有一篇关于CER以及SQL Server如何利用CER的好文章:

此外,以下是专门针对SQL Server开发CLR代码的最佳实践列表:


CLR代码中未捕获的异常不会导致服务器停机。CLR代码在单独的应用程序域中运行,并且是隔离的。最可能发生的情况是,异常会导致应用程序域关闭,并导致卸载应用程序域,这是不太可能发生的。这将使它在下一个请求时重新加载,或者在问题修复或部署程序集的新版本之前被禁用

因此,最多该特定CLR程序集将被禁用,而调用会话将收到错误消息。错误的CLR代码极不可能导致整个sql server实例崩溃;如果是的话,我会说那是微软的错误,而不是CLR函数或存储过程中的错误


很可能的情况是,未捕获的.net异常将被转换为tsql错误消息。最多,tsql连接将被终止;很可能会导致错误消息。

我听说CLR代码中抛出的未经处理的异常会导致服务器停机。我非常怀疑-有任何参考资料吗?你能证明你的CLR代码的用途吗?我见过SQL CLR过程使SQL进程崩溃。SQL CLR在SQL进程内部运行,因此,如果SQL进程崩溃,它可能会使SQL Server崩溃,就像T/SQL可能会使SQL Server崩溃一样,如果触发转储,那么这是microsoft的错误,而不是CLR函数中的错误。就像任何t/sql都会导致sql进程崩溃一样。
WITH( MAXDOP 1)