ParseValuesJson
и insertToTable
- определяемые пользователем функции.
Ниже приведен результат выполнения (ParseValuesJson
):
declare
@json nvarchar(max)=N'{
"Book":{
"IssueDate":"02-15-2019"
, "Detail":{
"Type":"Any Type"
, "Author":{
"Name":"Annie"
, "Sex":"Female"
}
}
, "Chapter":[
{
"Section":"1.1"
, "Title":"Hello world."
}
,
{
"Section":"1.2"
, "Title":"Be happy."
}
]
, "Sponsor":["A","B","C"]
}
}'
declare
@tempTable table (
topKey nvarchar(4000)
, [key] nvarchar(4000)
, IsType bit
, IsList bit
, [value] nvarchar(4000))
--execute
insert @tempTable
select * from GetValuesJson(@json,default)
topKey Key isType isList Value
--
Book Type 0 0 Any Type
Book Author 1 0 {"Name":"Annie", "Sex":"Female"}
Book IssueDate 0 0 02-15-2019
Book Chapter 1 1 [{"Section":"1.1", "Title":"Hello world."}, {"Section":"1.2", "Title":"Be happy."}]
Book Sponsor 1 1 ["A","B","C"]
Как заголовок, если игнорировать то, что делает функция, как я могу достичь следующей цели?
Если IsType
= 1, я хочу вызвать функцию ParseValuesJson
;
Если IsType
= 0, я хочу вызвать функцию insertToTable
.
Но я обнаружил, что sql case
не может так использоваться.
Этот SQL-запрос может выполняться рекурсивно и вызывать разные функции соответственно на одном уровне.
Это означает, что я не могу сначала проанализировать всю строку (ParseValuesJson
), а затем вставить результат (insertToTable
) в таблицу.
Есть ли другой способ достичь?
select
case IsType when 1 then
ParseValuesJson('{"' + [key] + '":' + [value] + '}',IsList)
else
insertToTable(topKey,[key])
end
from ParseValuesJson(@json,default)