نحوه ارسال پارامتر به JSON_VALUE و JSON_QUERY

نحوه ارسال پارامتر به JSON_VALUE و JSON_QUERY

فرض کنید حالتی در اسکیوال سرور(sql server) بوجود آمده که نیاز دارید مقدار فیلد های یک آبجکت(object) با ساختار جیسون(json) را بصورت داینامیک با ارسال پارامتر بخونید.مثل نمونه زیر:متغیر استرینگ شامل یک آبجکت جیسون و متغییر استرینگ شامل عنوان یکی از فیلد های آبجکت:
declare @jsonData Varchar(100)='{&quotusername&quot:&quotadmin&quot,&quotpassword&quot:&quot******&quot}’
declare @fieldName Varchar(100)=’username’اگه روی سیستمتون اس کیو ال 2017 به بالا دارید که خوشبحالتون! براحتی با دستور پایین میتونید این کار رو انجام بدید:select JSON_VALUE(@jsonData,’$.'[email protected])خوب الان تکلیف کسی که ورژن پائین تره اس کیو ال رو استفاده میکنه چیه؟دوتا راه دارید:1- اس کیو ال 2017 یا ورژن بالاتر رو نصب کنید :)2- از روش داینامیک کوئری ها استفاده کنیدخوب اگه امکان نصب نسخه بالاتر رو ندارید یا خدای نکرده مثل من تنبلید و حال نصب یه نسخه جدید رو ندارید از کوئری داینامیک ها به شکل زیر میتونید استفاده کنید:declare @jsonData Varchar(100)='{&quotusername&quot:&quotadmin&quot,&quotpassword&quot:&quot******&quot}’declare @fieldName varchar(max)=’username’declare @sql nvarchar(max)set @sql=’select @field=JSON_VALUE(”'[email protected]+”’, ”$.'[email protected]+”’)’;exec sp_executesql @sqlدر مثال بالا تنها کاری که کردیم این بود که همون دستور رو داخل یک متغیر استرینگ ریختیم و با اجرای اون بصورت sp_executesql خروجی رو مشاهده کردیمخوشبختانه خیلی هم سخت نبود :)در صورتی که بخواید خروجی این کوئری رو داخل یک متغیر دیگه بریزید ، می تونید از OUTPUT Parameter استفاده کنید:declare @field Varchar(max)
declare @jsonData Varchar(100)='{&quotusername&quot:&quotadmin&quot,&quotpassword&quot:&quot******&quot}’declare @fieldName varchar(max)=’username’declare @sql nvarchar(max)set @sql=’select @field=JSON_VALUE(”'[email protected]+”’, ”$.'[email protected]+”’)’;exec sp_executesql @sql,N’@field varchar(max) OUTPUT’,@[email protected] OUTPUTتوی مثال بالا یک متغیر بنام field اضافه شد و خروجی داینامیک کوئری رو داخل اون ریختیمالبته که یکم کار گره خورد!شمام اگه روش بهتر و یا راحت تری بلدید خوشحال میشم توی کامنت ها معرفی کنید

منبع

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *