Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
Sql server CLR函数调用远程SQL Server_Sql Server_Sqlclr - Fatal编程技术网

Sql server CLR函数调用远程SQL Server

Sql server CLR函数调用远程SQL Server,sql-server,sqlclr,Sql Server,Sqlclr,我对SQL Server CLR一无所知。我理解,在业务逻辑在SQL中实现起来非常复杂的情况下,我们应该使用CLR 在VB.NET中,我们有很多处理数据的功能,例如标准化数据。我试图通过CLR实现它们。这些函数首先访问远程服务器以获取一些参考数据,然后在本地服务器上进行处理 然而,无论我如何尝试,我都会犯错误 System.NullReferenceException:对象引用未设置为对象的实例 或者从远程服务器返回null 我们可以在CLR例程中访问远程服务器吗?如果是,怎么做?是的,你可以。

我对SQL Server CLR一无所知。我理解,在业务逻辑在SQL中实现起来非常复杂的情况下,我们应该使用CLR

在VB.NET中,我们有很多处理数据的功能,例如标准化数据。我试图通过CLR实现它们。这些函数首先访问远程服务器以获取一些参考数据,然后在本地服务器上进行处理

然而,无论我如何尝试,我都会犯错误

System.NullReferenceException:对象引用未设置为对象的实例

或者从远程服务器返回null


我们可以在CLR例程中访问远程服务器吗?如果是,怎么做?

是的,你可以。如果远程服务器是SQL Server(我假设是),则可以使用.NET framework中的普通SqlCommand和SqlConnection类来执行此操作

如果它们是web服务器,那么您可以使用web服务

旁注。在CLR中要非常小心,因为尽管CLR看起来很吸引人,但在SQL 2005下,您只有大约512MB的内存,通过添加一些启动参数,您可以将其提升到2Gb。只是要知道

编辑:

根据您的意见,我建议使用链接服务器,然后在本地重新创建远程表,然后在本地服务器上连接到它


您必须确保在本地框上重新创建索引和键,并且为了速度起见,请在将记录插入表后再创建,否则在已填充的表上创建索引将花费很长时间。

您可以在.Net CLR中访问远程服务器,但您确实不应该这样做

SQL server在协作多任务环境中运行,即线程可以被信任以某种方式及时终止和完成其处理。如果您开始调用远程方法(这可能会导致长时间延迟),那么很可能会导致SQL server工作线程饥饿,最终导致糟糕的事情发生


另请参见

Kragen,我意识到我应该使用sqlclient库连接到远程服务器,而不是在CLR中使用oledb。如果不建议访问远程服务器,是否最好将该服务器添加为链接服务器,然后再访问它?@Star如果您试图访问远程SQL server,则是的,链接服务器+分布式查询/事务绝对是最佳选择。Kragen,谢谢。然后我将使用链接服务器。我不熟悉分布式查询,我将对此进行搜索。再次感谢您的及时回复。谢谢您提供的信息。如上所述,我应该使用sqlclient连接而不是Oledb连接。如果不建议访问远程服务器,是否最好将该服务器添加为链接服务器,然后再访问它?您可以使用链接服务器,但它们对性能有很大影响,通常很难修复。如果您执行从SQL到SQL的分布式查询,您应该重新考虑您的体系结构,也许您正在做一些不应该做的事情。我们在一台SQL server上有参考数据库,我们在不同的SQL server上处理项目。要将引用数据库保持为存储库,最好的方法是什么?我们在SQL server上处理数据,而不是通过其他API。1)我建议从SQL server中删除该进程,并将其放在windows服务或可以同时看到两台服务器的外部计算机中。在这里,你可以在如何做上有点创意。然后,您可以将引用传递给处理服务器,或者,如果是业务逻辑,则可以在单独的服务器上执行.NET中的所有操作。或者2)如果这太难,一种克服通过链接服务器连接的方法(非常慢),您可以选择引用表,在处理服务器上本地创建它,然后在本地连接到它。但是为了速度,我将不惜一切代价避免通过链接服务器进行分布式查询。是的,它可以做到这一点,是的,文档中说它可以做到,是的,它可以做到,(慢慢地),但当事情变得艰难,你需要速度时,这将是你的过程中的第一个瓶颈,特别是在链接服务器上连接列。