簡體   English   中英

如何架構綁定在 SSDT 中使用 geography 或 Json 的函數?

[英]How do I schema bind a function that uses geography or Json in SSDT?

我有一個表值函數,我想將它添加到我的 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。

TL;DR:嘗試使用sys.限定名稱sys.

在您的情況下,嘗試將geography更改為sys.geography 並且您可能還必須對OPENJSON調用中的float列執行相同的操作。


剛剛遇到了完全相同的問題,但是使用帶有顯式nvarchar列映射的OPENJSON ,例如:

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

我在axisvalue線上得到錯誤。

這似乎是 SSDT 中的一個錯誤 - 由John.Nelson此處的開發人員社區門戶上報告。

我已經准備好建議在部署后進行丑陋的回退,然后我在 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
)

對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM