Arv*_*hra 6 sql-server t-sql json sql-server-2016
我收到错误:
“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
Run Code Online (Sandbox Code Playgroud)
样本数据:
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
Run Code Online (Sandbox Code Playgroud)
在 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
Run Code Online (Sandbox Code Playgroud)
因此,在您的情况下,您可能需要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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7667 次 |
| 最近记录: |