如何将Microsoft.SqlServer.Types导入Microsoft SQL Server 2012?

时间:2013-12-09 17:01:08

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

我刚刚完成将人口普查区块形状文件导入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)的建议,但我不确定我到底需要什么,如果这是正确的观察点。

我们非常感谢您提供的任何帮助。提前谢谢。

3 个答案:

答案 0 :(得分:1)

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

无论如何,我正坐在这个目录中(SQL 2012 / Win 7/64 bit OS):

  

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

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

答案 1 :(得分:0)

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

  

无法找到方法' STCrosses'对于类型   ' Microsoft.SqlServer.Types.SqlGeography'在集会中   ' Microsoft.SqlServer.Types'

我花了一些时间才明白STCrosses适用于几何数据类型,而对于地理位置,我应使用STIntersects

答案 2 :(得分:0)

方法名称区分大小写,并且需要 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)