我有一个表值函数,我想添加到我的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。
答案 0 :(得分:3)
sys.
根据您的情况,尝试将geography
更改为sys.geography
;并且您可能还必须对float
调用中的OPENJSON
列执行相同的操作。
只是遇到了完全相同的问题,但是遇到了带有显式OPENJSON
列映射的nvarchar
,例如:
OPENJSON(@query)
WITH
(
axis nvarchar(64) '$.axis',
value nvarchar(max) '$.value' AS JSON
)
我在axis
和value
行上得到了错误。
这似乎是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
)
那对我有用。