Sql-Server
將變數作為參數傳遞給 json_query 函式
我收到錯誤:
“JSON_VALUE 或 JSON_QUERY”的參數 2 必須是字元串文字
…同時嘗試將變數作為參數傳遞給
JSON_QUERY
函式。請幫我解決它。DECLARE @cnt INT = 1; DECLARE @cnt_total INT = 1; DECLARE @json NVARCHAR(MAX); DECLARE @json1 NVARCHAR(MAX); declare @str VARCHAR(200); WHILE @cnt <= 10 BEGIN set @str = '$.Seasons[0].Products['+convert(varchar,@cnt)+'].ProductChannels'; set @str = char(39) +@str+ char(39); PRINT @STR select @json = json_query(jfile,@STR) from Import.tstjson; --MORE CODE SET @cnt = @cnt + 1; END
樣本數據:
{ "Seasons": [ { "Season": "12321231", "Products": [ { "ProductId": "211", "ProductChannels": [ { "ChannelId": 1, "WeekQuantities": [] } ], "ccc": 3, "Tttt": 4 } ] } ] }
在 SQL Server 2017 中是可能的。
在 SQL Server 2017 和 Azure SQL 數據庫中,您可以提供一個變數作為路徑的值。
在 SQL Server 2016 中,您必須動態建構查詢。
我猜想,正如它所說的“字元串文字”,您必須傳遞
json_query
一個字元串而不是變數,就像在BOL範例中一樣SELECT PersonID,FullName, JSON_QUERY(CustomFields,'$.OtherLanguages') AS Languages FROM Application.People
所以在你的情況下,你可能需要
EXEC
.免責聲明:您需要確保您實現的程式碼不受 SQL 注入的影響。
DECLARE @SQL VARCHAR(500); DECLARE @cnt INT = 1; WHILE @cnt <= 10 BEGIN SET @SQL = 'SELECT json_query(jfile, ''$.Seasons[0].Products['+convert(varchar(2),@cnt)+'].ProductChannels'') from Import.tstjson'; EXEC @SQL; SET @cnt = @cnt + 1; END