可以使用 SQL Server 2008 中的视图返回地理数据类型 Lat/Long 属性吗?

Dav*_*vid 3 sql-server-2008 sql-server sql-server-2008-r2 c# spatial

希望这个问题是不言自明的。

我一直在寻找关于 sql server 2008 中的视图和地理数据类型的微软文档似乎很少/很差,我认为答案是“不,地理数据类型要么不受支持,要么在看法”; 但我不完全确定,我希望得到一些佐证。

我一直在尝试将地理数据添加到现有视图中。我的最终目标是从相关领域检索经度/纬度数据。

这是应用于表时有效但在视图中定义时无效的选择语句(简化):

SELECT     
    [dbo.vendor.location].Lat AS latitude,
FROM         
    dbo.vendor
Run Code Online (Sandbox Code Playgroud)

请注意,这[dbo.vendor.location]是字段,并且Latgeography数据类型的纬度属性。

当该 sql 在视图中运行时,将返回以下错误:

The multi-part identifier "dbo.vendor.location.Lat" could not be bound
Run Code Online (Sandbox Code Playgroud)

编辑:

请注意,我还尝试了以下查询,结果相似:

SELECT     
    [dbo].[vendor].[location].Lat AS latitude,
FROM         
    dbo.vendor
Run Code Online (Sandbox Code Playgroud)

在这种情况下,SQL Management Studio 删除引号并返回相同的“多部分...无法绑定”错误。

Mar*_*ith 5

不要[dbo].[vendor].[location].LatSELECT列表中引用它。

只需使用vendor.location.Latlocation.Lat或定义表的别名并使用它。

CREATE TABLE dbo.Vendor([location] geography)

GO

/*Works fine*/
CREATE VIEW V1
AS
SELECT     
   v.location.Lat AS latitude
FROM         
    dbo.vendor v

GO

/*Fails*/
CREATE VIEW V2
AS
SELECT     
   dbo.vendor.location.Lat AS latitude
FROM         
    dbo.vendor
Run Code Online (Sandbox Code Playgroud)

单独使用列dbo.vendor.location(没有 CLR 属性调用)实际上在列列表中仍然有效,但无论如何使用“多于两部分的列名”是在已弃用的 TSQL 功能列表中