You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在本地U-SQL Catalog注册SQLServerSpatial DLL?遇系统程序集报错求解决

解决本地注册Microsoft.SqlServer.Types程序集的问题

这是个很典型的系统程序集权限问题——本地SQL Server已经预装了Microsoft.SqlServer.Types作为系统级程序集,所以你没法手动重复注册它,而Azure Data Lake的运行环境和本地SQL Server的CLR管理机制不一样,才允许你注册。下面给你几个可行的解决方向:

1. 先确认本地SQL Server是否已经自带该程序集

本地SQL Server(尤其是2016及以上版本)默认就包含Microsoft.SqlServer.Types程序集,你可以先执行以下查询确认它的存在和版本:

SELECT name, version, permission_set_desc 
FROM sys.assemblies 
WHERE name = 'Microsoft.SqlServer.Types';

如果查询结果里有版本13.0.0.0的记录,那你完全不需要手动注册,直接在SQL代码或应用程序里使用它提供的空间功能就行。

2. 用绑定重定向适配版本差异

如果你的应用程序要求特定版本的Microsoft.SqlServer.Types,但本地SQL Server里的版本不匹配,可以通过绑定重定向让应用指向SQL Server已有的版本。在你的应用配置文件(app.config或web.config)里添加以下配置:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity 
          name="Microsoft.SqlServer.Types" 
          publicKeyToken="89845dcd8080cc91" 
          culture="neutral" />
      <!-- 把oldVersion范围改成你应用需要的版本,newVersion改成本地SQL Server实际的版本 -->
      <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

3. 按照错误提示创建自定义封装程序集

如果确实需要扩展空间功能,或者必须使用自定义逻辑,你可以自己写一个CLR程序集封装Microsoft.SqlServer.Types的功能,再注册这个自定义程序集到本地SQL Server:

步骤示例:

  • 新建一个.NET类库项目,添加对Microsoft.SqlServer.Types(版本13.0)的引用;
  • 编写封装空间操作的方法,比如:
using Microsoft.SqlServer.Types;
using Microsoft.SqlServer.Server;

public class CustomSpatialTools
{
    [SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true)]
    public static SqlGeometry CreateCustomPoint(double lat, double lon)
    {
        // 这里可以添加自定义逻辑,比如验证坐标范围
        if (lat < -90 || lat > 90 || lon < -180 || lon > 180)
            return null;
        return SqlGeometry.Point(lon, lat, 4326);
    }
}
  • 编译项目后,在SQL Server里注册这个自定义程序集:
CREATE ASSEMBLY CustomSpatialToolsAssembly
FROM 'C:\YourProject\bin\Release\CustomSpatialTools.dll'
WITH PERMISSION_SET = SAFE;
  • 最后创建对应的SQL函数来调用这个CLR方法:
CREATE FUNCTION dbo.CreateCustomPoint(@lat float, @lon float)
RETURNS geometry
AS EXTERNAL NAME CustomSpatialToolsAssembly.CustomSpatialTools.CreateCustomPoint;

4. 检查SQL Server版本兼容性

注意Microsoft.SqlServer.Types的版本和SQL Server版本是一一对应的:

  • 13.0.0.0 → SQL Server 2016
  • 14.0.0.0 → SQL Server 2017
  • 15.0.0.0 → SQL Server 2019
    如果你的本地SQL Server版本低于2016,那它不会自带13.0版本的程序集,这种情况你可能需要升级SQL Server,或者降级使用对应版本的Microsoft.SqlServer.Types。

内容的提问来源于stack exchange,提问作者Tysklind-MSFT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:53:37