2016-10-25 3 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')' - これは変数がnullであることを意味します。したがって、 'IF'ではupdateステートメントに行きます。テーブルに行がないと仮定しているので、 '0 rows affected'が得られます。あなたは 'ELSE'条件であなたの質問が正しいのですか? where句がないので、テーブルのすべてのレコードを更新するように見えますか? – GarethD

+0

xmlクエリが間違っていると、nullが返され、挿入がヒットしません。あなたの更新クエリにはwhere節がありません。これは、私が推測しているのは、意図された動作ではないかもしれないということです。 – Tanner

答えて

0

BEGINステートメントのENDはありません。 このコードを試してください

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コードを確認してください。 claimid[1]を交換し、

-- 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行(複数可)の影響を受けます)。私は単にOPが誤ってそれをオフにトリミング想定し、それ以外の場合は、彼が0行 – SriramNandha

+0

示す0の行は、私はあなたが問題になっているタイプミス(ミスしたエンド)が問題であると仮定することができると思います – SriramNandha

+0

に影響を与え、それを助けるしなさい – Tanner

1

あなたはそうのようにそれを照会する必要が値の属性を取得するには、間違ったXMLを照会している:それは、単一の反転コンマにする必要があります

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 

出力リレー:

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

また、私がコメントしたように、現在の選択がnullを返すため、挿入がヒットしないので、IF (@claimid = 0)はtrueを返しません。また、where句を指定しない限り、更新クエリはすべての行を更新します。

関連する問題