如何在 SSDT 中架构绑定使用地理或 Json 的函数?
How do I schema bind a function that uses geography or Json in SSDT?
我有一个 table 有价值的函数,我想添加到我的 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: Cannot schema bind function 'dbo.fn_get_n_geos' because name 'geography' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.
SQL70561: Cannot schema bind function 'dbo.fn_get_n_geos' because name 'float' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.
当我在 SQL management studio 中执行此功能时,一切正常。我如何让 SSDT 玩这些功能?
我的项目针对 SQL Server 2016。
TL;DR:尝试使用 sys.
限定名称
在你的情况下,尝试将 geography
更改为 sys.geography
;您可能还必须对 OPENJSON
调用中的 float
列执行相同的操作。
刚遇到完全相同的问题,但 OPENJSON
具有显式 nvarchar
列映射,例如:
OPENJSON(@query)
WITH
(
axis nvarchar(64) '$.axis',
value nvarchar(max) '$.value' AS JSON
)
我在 axis
和 value
行收到错误。
这似乎是 SSDT 中的错误 - John.Nelson
在开发者社区门户 here 上报告。
我已经准备好建议丑陋的回落到 post-deploy,然后我偶然发现了 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
)
那个对我有用。
我有一个 table 有价值的函数,我想添加到我的 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: Cannot schema bind function 'dbo.fn_get_n_geos' because name 'geography' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.
SQL70561: Cannot schema bind function 'dbo.fn_get_n_geos' because name 'float' is invalid for schema binding. Names must be in two-part format and an object cannot reference itself.
当我在 SQL management studio 中执行此功能时,一切正常。我如何让 SSDT 玩这些功能?
我的项目针对 SQL Server 2016。
TL;DR:尝试使用 sys.
限定名称
在你的情况下,尝试将 geography
更改为 sys.geography
;您可能还必须对 OPENJSON
调用中的 float
列执行相同的操作。
刚遇到完全相同的问题,但 OPENJSON
具有显式 nvarchar
列映射,例如:
OPENJSON(@query)
WITH
(
axis nvarchar(64) '$.axis',
value nvarchar(max) '$.value' AS JSON
)
我在 axis
和 value
行收到错误。
这似乎是 SSDT 中的错误 - John.Nelson
在开发者社区门户 here 上报告。
我已经准备好建议丑陋的回落到 post-deploy,然后我偶然发现了 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
)
那个对我有用。