mysql - Use Delete table query in stored procedure only when xml data is passed from C# to stored procedure -
here xml data of table passing backend c# stored procedure.
<arrayofuserdata xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xsd="http://www.w3.org/2001/xmlschema"> <userdata> <name>dovyan<name /> <id>434556464<id /> </userdata> <userdata> <name>alex<name /> <id>12345767<id /> </userdata> </arrayofuserdata>
this stored procedure using
use [database] go set ansi_nulls on go set quoted_identifier on go alter procedure [database].[sp_saveusertable] ( @in_params xml ) begin delete dbo.usertable; //use when xml data present. how part ? select t.x.value('./name[1]','varchar(6)') [name] , t.x.value('./id[1]','varchar(75)') [id] #temp @in_params.nodes('/arrayofuserdata/userdata') t(x); begin transaction insert [dbo].[usertable](name,id) select name,id #temp t commit transaction drop table #temp; end
here query. can see, first deleting table , saving xml data table. there scenario when xml data empty. stored procedure delete table no new data saved empty.
i want put condition delete table when there xml data. if there no xml data, donot delete table. way ?
1) assuming after execution of procedure ends data usertable read procedure isn't safe within concurent environment. if 2 connections execute same procedure (with diff. xml data) , read inserted data 1 connection can read data inserted second connection. desired behavior ?
2) use
select t.x.value('./name[1]','varchar(6)') [name] , t.x.value('./id[1]','varchar(75)') [id] #temp @in_params.nodes('/arrayofuserdata/userdata') t(x); if @@rowcount > 0 -- num of affetected rows begin delete dbo.usertable; ... end else begin ... end