I have a JSON array as below
[
{
"CRT_FIRST_NAME": "abc",
"CRT_EMAIL": "abc@gmail.com",
"CRT_ID": 60
},
{
"CRT_FIRST_NAME": "pqr",
"CRT_EMAIL": "pqr@gmail.com",
"CRT_ID": 61
},
{
"CRT_FIRST_NAME": "sample",
"CRT_EMAIL": "sample@gmail.com",
"CRT_ID": 62
}
]
I am passing it and executing a stored procedure save_employee_data
as below
exec save_employee_data '[{"CRT_FIRST_NAME": "abc","CRT_EMAIL": "abc@gmail.com","CRT_ID": 60},{"CRT_FIRST_NAME": "pqr","CRT_EMAIL": "pqr@gmail.com","CRT_ID": 61},{"CRT_FIRST_NAME": "sample","CRT_EMAIL": "sample@gmail.com","CRT_ID": 62}]'
And my stored procedure is as below
CREATE PROCEDURE [dfed].[save_employee_data]
@jsondata nvarchar(max)
AS
DECLARE
@CRTID_FETCH INT,
@CRT_FIRST_NAME_FETCH VARCHAR(250),
@CRT_EMAIL_FETCH VARCHAR(250)
BEGIN
SELECT @CRT_FIRST_NAME_FETCH=CRT_FIRST_NAME, @CRT_EMAIL_FETCH=CRT_EMAIL, @CRTID_FETCH=CRT_ID FROM
OPENJSON ( @jsondata )
WITH (
CRT_FIRST_NAME varchar(200) '$.CRT_FIRST_NAME' ,
CRT_EMAIL varchar(200) '$.CRT_EMAIL',
CRT_ID varchar(200) '$.CRT_ID'
)
UPDATE employees SET email_staff = @CRT_EMAIL_FETCH WHERE CRT_ID = @CRTID_FETCH
END
Here the update query is not working.
I am trying loop my JSON data and fetch the CRT_EMAIL
, CRT_FIRST_NAME
, CRT_ID
values from json data and based on these values I am trying to update email_staff
column with CRT_EMAIL
value for its respective column i.e primary key CRT_ID
But the update query is not working. Is this the correct way of looping JSON data?
Just join the JSON data to the employees
table and update the results. Like this
with n as
(
SELECT CRT_FIRST_NAME, CRT_EMAIL, CRT_ID
FROM OPENJSON ( @jsondata )
WITH (
CRT_FIRST_NAME varchar(200) '$.CRT_FIRST_NAME' ,
CRT_EMAIL varchar(200) '$.CRT_EMAIL',
CRT_ID varchar(200) '$.CRT_ID'
)
), q as
(
select n.CRT_EMAIL, e.email_staff , e.crt_id
from n
join employees e
on n.CRT_ID = e.CRT_ID
)
--select * from q;
update q set email_staff = CRT_EMAIL;
If you want to loop over the json data you can use a cursor. EG
DECLARE C CURSOR LOCAL FOR
SELECT CRT_FIRST_NAME, CRT_EMAIL, CRT_ID
FROM OPENJSON ( @jsondata )
WITH (
CRT_FIRST_NAME varchar(200) '$.CRT_FIRST_NAME' ,
CRT_EMAIL varchar(200) '$.CRT_EMAIL',
CRT_ID varchar(200) '$.CRT_ID'
);
OPEN C;
FETCH NEXT FROM C INTO @CRT_FIRST_NAME, @CRT_EMAIL, @CRT_ID;
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE employees SET email_staff = @CRT_EMAIL WHERE CRT_ID = @CRT_ID;
FETCH NEXT FROM C INTO @CRT_FIRST_NAME, @CRT_EMAIL, @CRT_ID;
END
CLOSE C;
DEALLOCATE C;