如何在SSDT中架构绑定使用地理或Json的函数?

时间:2019-05-23 19:24:57

标签: json sql-server sql-server-data-tools

我有一个表值函数,我想添加到我的ssdt项目中。

create function dbo.fn_get_n_geos(@p0 nvarchar(max),@n bigint)
returns table
with schemabinding as
return 
select top(@n) geo=geography::Point(latitude,longitude,4326)
              ,row=-1 + convert(int,row_number() over (order by (select 1)))
from openjson(@p0)
with (latitude float 'strict $[0]', longitude float 'strict $[1]');

添加此功能时,会收到以下警告:

  
    

SQL70561:无法架构绑定功能'dbo.fn_get_n_geos',因为名称'geography'对于架构绑定无效。名称必须采用两部分格式,并且对象不能引用自身。

         

SQL70561:无法架构绑定函数'dbo.fn_get_n_geos',因为名称“ float”对于架构绑定无效。名称必须采用两部分格式,并且对象不能引用自身。

  

当我在SQL Management Studio中执行此功能时,一切正常。如何让SSDT发挥这些功能?

我的项目针对SQL Server 2016。

1 个答案:

答案 0 :(得分:3)

TL; DR:尝试使用sys.

限定名称

根据您的情况,尝试将geography更改为sys.geography;并且您可能还必须对float调用中的OPENJSON列执行相同的操作。


只是遇到了完全相同的问题,但是遇到了带有显式OPENJSON列映射的nvarchar,例如:

OPENJSON(@query) 
WITH
(
  axis nvarchar(64) '$.axis',
  value nvarchar(max) '$.value' AS JSON
)

我在axisvalue行上得到了错误。

这似乎是SSDT中的错误-John.Nelson在开发者社区门户网站here上报告了该问题。

我全力以赴建议丑陋地退回到部署后,然后偶然发现this over on Dba Stackexchange(我搜索了错误代码SQL70561),其中OP遇到了相同的错误,使用hierarchyid

那里的解决方案是使hierarchyid符合sys.hierarchyid

从未 困扰了合格的内置SQL类型名称-但是,可以肯定的是,一旦我将OPENJSON调用更改为:

OPENJSON(@query) 
WITH
(
  axis sys.nvarchar(64) '$.axis',
  value sys.nvarchar(max) '$.value' AS JSON
)

对我有用。