2016-10-25 2 views
0

хранимой процедуры:Хранимые значения Процедура не вставить XML узел

ALTER proc [dbo].[Equip_SaveTeamTaskAssigineeDetails] (
@saveDataXML xml) 
as 
begin 

    Declare @claimid int, 
      @createdate datetime, 
      @duedate datetime, 
      @startdate datetime, 
      @assignmentid int, 
      @assignedto varchar(50), 
      @piority varchar(50), 
      @comment varchar(4000) 



    select @claimid = node.value('claimid[1]','int'), 
      @createdate = node.value('createdate[1]','datetime'), 
      @duedate = node.value('duedate[1]','datetime'), 
      @startdate = node.value('startdate[1]','datetime'), 
      @assignmentid = node.value('assignmentid[1]','int'), 
      @assignedto = node.value('assignedto[1]','varchar(50)'), 
      @piority= node.value('piority[1]','varchar(50)'), 
      @comment = node.value('comment[1]','varchar(4000)') 


     from @saveDataXML.nodes('/TeamTaskDetails/Task') nodes(node) 

IF (@claimid = 0) 
     BEGIN 
     INSERT INTO [dbo].[TeamTaskAssiginment] 
       ([claimid], 
       [createdate], 
       [duedate], 
       [startdate], 
       [assignedid], 
       [assiginedto], 
       [priority], 
       [comment]) 




       VALUES 
       (@claimid, 
      @createdate, 
      @duedate, 
      @startdate , 
      @assignmentid , 
      @assignedto , 
      @piority , 
      @comment 
       ) 

     --SET @claimid = SCOPE_IDENTITY() 
     END 
    ELSE 
     BEGIN 
      Update [dbo].[TeamTaskAssiginment] set 


      [email protected] , 
       [email protected], 
       [email protected], 
       [email protected], 
       [email protected], 
       [email protected], 
       [email protected], 
       [email protected] 

     END 

Execute Stored Procedure 

Exec Equip_SaveTeamTaskAssigineeDetails @saveDataXML = 
<TeamTaskDetails> 
<Task claimid="1" createdate="2000-12-16" duedate="2000-12-16" startdate="2000-12-16" assignmentid="1" assignedto="test" piority="HIGH" comment="test" /> 
</TeamTaskDetails> 

Если я выполнил хранимую процедуру его показывая 0 Ряды Затронутые значения не вставляя

Пожалуйста, помогите решить эту проблему.

+1

Вы неправильно назначаете переменные, чтобы извлечь атрибуты, а не текст, используйте '@', например. 'SELECT @claimid = node.value ('@ Claimid [1]', 'int')' - Это означает, что ваши переменные равны нулю. поэтому в 'IF' вы переходите к заявлению об обновлении. Я предполагаю, что в таблице нет строк, поэтому вы получаете «0 строк». Вы уверены, что ваш запрос в состоянии «ELSE» верен? Нет предложения where, похоже, что вы обновляете каждую запись в таблице? – GarethD

+0

ваш запрос xml неверен, он возвращает null, поэтому вставка не будет удалена. и ваш запрос на обновление не имеет условия where, которое, как я предполагаю, может не быть предназначенным поведением. – Tanner

ответ

0

Здесь нет КОНЕЦ для инструкции BEGIN. Пожалуйста, попробуйте этот код

ALTER proc [dbo].[Equip_SaveTeamTaskAssigineeDetails] (
@saveDataXML xml) 
AS 
BEGIN 

    Declare @claimid int, 
      @createdate datetime, 
      @duedate datetime, 
      @startdate datetime, 
      @assignmentid int, 
      @assignedto varchar(50), 
      @piority varchar(50), 
      @comment varchar(4000) 



    select @claimid = node.value('claimid[1]','int'), 
      @createdate = node.value('createdate[1]','datetime'), 
      @duedate = node.value('duedate[1]','datetime'), 
      @startdate = node.value('startdate[1]','datetime'), 
      @assignmentid = node.value('assignmentid[1]','int'), 
      @assignedto = node.value('assignedto[1]','varchar(50)'), 
      @piority= node.value('piority[1]','varchar(50)'), 
      @comment = node.value('comment[1]','varchar(4000)') 


     from @saveDataXML.nodes('/TeamTaskDetails/Task') nodes(node) 

    IF (@claimid = 0) BEGIN 
     INSERT INTO [dbo].[TeamTaskAssiginment] 
       ([claimid], 
       [createdate], 
       [duedate], 
       [startdate], 
       [assignedid], 
       [assiginedto], 
       [priority], 
       [comment]) 




       VALUES 
       (@claimid, 
      @createdate, 
      @duedate, 
      @startdate , 
      @assignmentid , 
      @assignedto , 
      @piority , 
      @comment 
       ) 

     --SET @claimid = SCOPE_IDENTITY() 
    END ELSE BEGIN 
      Update [dbo].[TeamTaskAssiginment] set 


      [email protected] , 
       [email protected], 
       [email protected], 
       [email protected], 
       [email protected], 
       [email protected], 
       [email protected], 
       [email protected] 

     END 
END 


GO 

Также проверьте код XML. Она должна быть в одной перевернутой запятой:

-- Execute Stored Procedure  
Exec Equip_SaveTeamTaskAssigineeDetails @saveDataXML = 
'<TeamTaskDetails> 
<Task claimid="1" createdate="2000-12-16" duedate="2000-12-16" startdate="2000-12-16" assignmentid="1" assignedto="test" piority="HIGH" comment="test" /> 
</TeamTaskDetails>' 
+0

Привет, нет ошибки, но не затронута строка, ее отображение (0 строк затронуто) .please help – SriramNandha

+0

, показывающий 0 строк, затронутых – SriramNandha

+0

Я думаю, вы можете предположить, что проблема опечатка (пропущенный конец) в вопросе является проблемой. я просто предположил, что OP обрезает его по ошибке, иначе он не сможет создать/изменить его вообще – Tanner

1

Вы запрашивая XML неправильно, чтобы получить значения, которые нужно запросить его как и атрибут, заменив claimid[1]:

SELECT @claimid = node.value('@claimid', 'int') ,.... 

Полный пример:

DECLARE @saveDataXML AS XML = 
    '<TeamTaskDetails> 
     <Task claimid="1" createdate="2000-12-16" duedate="2000-12-16" 
       startdate="2000-12-16" assignmentid="1" assignedto="test" 
       piority="HIGH" comment="test" /> 
    </TeamTaskDetails>' 

DECLARE @claimid INT , 
    @createdate DATETIME , 
    @duedate DATETIME , 
    @startdate DATETIME , 
    @assignmentid INT , 
    @assignedto VARCHAR(50) , 
    @piority VARCHAR(50) , 
    @comment VARCHAR(4000) 



SELECT @claimid = node.value('@claimid', 'int') , 
     @createdate = node.value('@createdate', 'datetime') , 
     @duedate = node.value('@duedate', 'datetime') , 
     @startdate = node.value('@startdate', 'datetime') , 
     @assignmentid = node.value('@assignmentid', 'int') , 
     @assignedto = node.value('@assignedto', 'varchar(50)') , 
     @piority = node.value('@piority', 'varchar(50)') , 
     @comment = node.value('@comment', 'varchar(4000)') 
FROM @saveDataXML.nodes('/TeamTaskDetails/Task') nodes (node) 


SELECT claimid = @claimid , 
     createdate = @createdate , 
     duedate = @duedate , 
     startdate = @startdate , 
     assignedid = @assignedto , 
     assiginedto = @assignedto , 
     priority = @piority , 
     comment = @comment 

Ouput:

claimid createdate duedate  startdate assignedid.... 
1  2000-12-16 2000-12-16 2000-12-16 test... 

Кроме того, как я уже отмечал, вставка не попадает, потому что ваш текущий выбор возвращает нули, поэтому IF (@claimid = 0) не вернет true. И ваш запрос на обновление будет обновлять каждую строку, если вы не укажете предложение where.

Смежные вопросы