[英]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。
sys.
限定名稱sys.
在您的情況下,嘗試將geography
更改為sys.geography
; 並且您可能還必須對OPENJSON
調用中的float
列執行相同的操作。
剛剛遇到了完全相同的問題,但是使用帶有顯式nvarchar
列映射的OPENJSON
,例如:
OPENJSON(@query)
WITH
(
axis nvarchar(64) '$.axis',
value nvarchar(max) '$.value' AS JSON
)
我在axis
和value
線上得到錯誤。
這似乎是 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.