【问题标题】:How to import Microsoft.SqlServer.Types into Microsoft SQL Server 2012?如何将 Microsoft.SqlServer.Types 导入 Microsoft SQL Server 2012?
【发布时间】:2013-12-09 17:01:08
【问题描述】:

我刚刚将人口普查块形状文件导入 Microsoft SQL Server 2012,现在在尝试对我引入的数据使用某些地理特征(STContains、STWithin、UnionAggregate 等)时遇到问题。我检查了导入我的 .shp 文件之前的 .prj 文件,我确定它是 geogrpahy 而不是几何类型。

这是我一直在尝试的示例,只是为了测试它(直接来自 MSDN 网站):

DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::Parse('CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (-122.200928    47.454094, -122.810669 47.00648, -122.942505 46.687131, -121.14624 45.786679, -119.119263  46.183634), (-119.119263 46.183634, -119.273071 47.107523, -120.640869 47.569114, -122.200928 47.454094)))');
SET @h = geography::Parse('POINT(-121.703796 46.893985)');

select @g.stcontains(@h)

这是我收到的错误:

Msg 6506, Level 16, State 10, Line 6
Could not find method 'stcontains' for type 'Microsoft.SqlServer.Types.SqlGeography' in  assembly 'Microsoft.SqlServer.Types'

我已经对该主题进行了一些研究,似乎我需要安装某种附加功能。我检查了我的 C: 文件夹,因为我看到了通过 Program Files/Microsoft SQL Server/100/SDK/Assemblies/Microsoft.SqlServer.Types.dll 安装它的建议,但因为找不到“Assemblies”文件夹而被难住了。我还看到了下载 Microsoft SQL Server 2012 功能包 (http://www.microsoft.com/en-us/download/details.aspx?id=29065) 的建议,但我不确定我到底需要什么,如果那是正确的查看位置。

我们将不胜感激您提供的任何帮助。提前致谢。

【问题讨论】:

  • 我遇到了同样的问题。有人对此有答案吗?或者任何人都可以为此向 Microsoft 提交错误报告吗?我们正在运行 SQL Server 2014,数据库兼容级别为 120,并且在 SSMS 中仍然出现错误“在程序集 Microsoft.SQLServer.Types 中找不到类型 Microsoft.SQLServer.Types.SQLGeography 的方法 .STContains”我们需要安装服务包?一个功能包,还是什么?我尝试过不同的案例,例如 .STContains、.STcontains 和 .stcontains。没有工作。

标签: sql sql-server sql-server-2012 spatial sqlgeography


【解决方案1】:

对于我的很多项目,我在项目级别 (Visual Studio) 创建了一个名为“libraries”的文件夹,我在其中放置了这种性质的 DLL 和其他第三方的东西。我不知道这是否是标准做法,但与我一起工作的每个人都这样做了一段时间,并且在此之前它在 TFS 和 Subversion 中运行良好。

不管怎样,我的就在这个目录下(SQL 2012 / Win 7 / 64 bit OS):

C:\Program Files (x86)\Microsoft SQL Server\110\Shared

我将它从那个目录复制到我项目中的库文件夹中。

【讨论】:

  • 感谢您的好评。我发现它位于那个目录中。如果我试图在 SQL 中的某个数据库中访问这些功能,我应该将其复制并粘贴到哪里?
  • 我刚刚重新阅读了您的代码,我想您可能想尝试正确的大小写。例如,STunion 可以工作,但 STunion 不能。这有点奇怪,因为 T-SQL 在其他方面不区分大小写。
【解决方案2】:

我在使用 SQL Server 2016 LocalDB 时遇到了同样的问题:

找不到类型的方法“STCrosses” 程序集中的“Microsoft.SqlServer.Types.SqlGeography” 'Microsoft.SqlServer.Types'

我花了一段时间才明白STCrosses 是用于几何数据类型,而对于地理我应该使用STIntersects

【讨论】:

    【解决方案3】:

    方法名区分大小写,需要 STContains 而不是 stcontains

    DECLARE @g geography;
    DECLARE @h geography;
    SET @g = geography::Parse('CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (-122.200928    47.454094, -122.810669 47.00648, -122.942505 46.687131, -121.14624 45.786679, -119.119263  46.183634), (-119.119263 46.183634, -119.273071 47.107523, -120.640869 47.569114, -122.200928 47.454094)))');
    SET @h = geography::Parse('POINT(-121.703796 46.893985)');
    
    select @g.STContains(@h)
    

    【讨论】:

      猜你喜欢
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 2017-06-25
      相关资源
      最近更新 更多