Я столкнулся со сценарием, в котором я хочу передать большой объем данных в хранимую процедуру для генерации динамического SQL.
Данные, которые я хочу передать, хранятся в этом объекте класса Json / C #, который я использую в своем веб-проекте ASP.NET MVC.
[
{
"code":"ABC123",
"Count": "12998",
"Params":
[
{"name": "Recent", "value": "0-12m"},
{"name": "Orders", "value": "1"}
]
},
{
"code":"ABC124",
"Count": "13998",
"Params":
[
{"name": "Recent", "value": "0-12m"},
{"name": "Orders", "value": "2"}
]
},
{
"code":"ABC125",
"Count": "7998",
"Params":
[
{"name": "Recent", "value": "0-12m"},
{"name": "Orders", "value": "3"}
]
}
]
.....
Затем используйте этот текстовый параметр для преобразования обратно в объект JSON, я использую его в фильтре действий для преобразования его в объект.
public class ObjectFilter : ActionFilterAttribute
{
public string Param { get; set; }
public Type RootType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if ((filterContext.HttpContext.Request.ContentType ?? string.Empty).Contains("application/json"))
{
object o =
new DataContractJsonSerializer(RootType).ReadObject(filterContext.HttpContext.Request.InputStream);
filterContext.HttpContext.Request.InputStream.Seek(0, SeekOrigin.Begin); // Rewind InputStream for other filters
filterContext.ActionParameters[Param] = o;
}
else
{
var xmlRoot = XElement.Load(new StreamReader(filterContext.HttpContext.Request.InputStream,
filterContext.HttpContext.Request.ContentEncoding));
object o = new XmlSerializer(RootType).Deserialize(xmlRoot.CreateReader());
filterContext.ActionParameters[Param] = o;
}
}
}
, а затем используйте C # и т. Д. В моей хранимой процедуре CLR для создания оператора SQL, такого как:
UPDATE [Sample]
SET [Field] =
CASE
WHEN [Recent] = "0-12m" AND [Orders] = "1" THEN "ABC123"
WHEN [Recent] = "0-12m" AND [Orders] = "2" THEN "ABC124"
WHEN [Recent] = "0-12m" AND [Orders] = "3" THEN "ABC125"
...
Возможно ли это, и кто-нибудь когда-либо делал что-то подобное? Я видел несколько постов об использовании параметра XML, но ни один не использовал параметр varchar с использованием десериализованного (?) Json.