2012-03-29 8 views
1

私は、他のサーバーに存在するテーブルのステータスを確認する必要があり、それを更新する必要がある手順があります。ここで If-Else Condition insideカーソルが機能しない

ALTER PROCEDURE [dbo].[testproceudre]  
AS  
DECLARE @Status INT  
DECLARE @UpdatedDateTime DATETIME  
DECLARE @STSFLG INT  
--dynamic query variables  

DECLARE @SQLString NVARCHAR(4000)  
DECLARE @ParmDefinition NVARCHAR(4000)  
DECLARE @DBSTRING VARCHAR(1000)  
DECLARE @TABLESTR VARCHAR(200)  
BEGIN  

SET @DBSTRING = '[server name].[db name]'   
SET @TABLESTR = ''  

DECLARE @SYSproUploadflag INT  
DECLARE @DpCodeExist INT  

SET @SYSproUploadflag = 0  
SET @DpCodeExist = 0  
SET @TABLESTR = @DBSTRING+'.[dbo].[otherservertablename]'  
SET @ParmDefinition = N'@Status INT,@UpdatedDateTime DATETIME'  
SET @SQLString ='SELECT StatusFlg,ConfirmedDate FROM localtablename 
JOIN '+ @TABLESTR +' ON  
IssuesId=SFAIssueId WHERE Statusflg=4'  

EXECUTE sp_executesql  
@SQLString,  
@ParmDefinition,  
@Status = @Status,  
@UpdatedDateTime = @UpdatedDateTime  
BEGIN  
    ------------------------------------------------------------------------ 
    IF @SYSproUploadflag = 0  
    BEGIN 
    DECLARE PARKCURSOR CURSOR FOR 
    SELECT STATUS FROM [server name].[db name].[dbo].[otherservertablename] 
    JOIN localtablename ON SFAISSUEID = ISSUESID 
    OPEN PARKCURSOR 
    FETCH NEXT FROM PARKCURSOR 
    INTO @STSFLG 
    WHILE (@@FETCH_STATUS = 0) 
    BEGIN 
     IF(@STSFLG = 3) 
     BEGIN 
      UPDATE issue2 SET status = 4,UpdatedDateTime=ConfirmedDate, 
      SOURCEOFUPDATION = 'SFA'  
      FROM [server name].[db name].[dbo].[otherservertablename] issue2 JOIN  
      tblAHCIssues issue1  
      ON issue2.sfaissueid=issue1.issuesid 
     END 
     IF(@STSFLG = 2) 
     BEGIN 
      UPDATE issue2 SET status = 7,UpdatedDateTime=ConfirmedDate, 
      SOURCEOFUPDATION = 'SFA'  
      FROM [server name].[db name].[dbo].[otherservertablename] issue2 JOIN  
      localtablename issue1  
      ON issue2.sfaissueid=issue1.issuesid 
     END 
     FETCH NEXT FROM PARKCURSOR INTO @STSFLG 
    END 
    CLOSE PARKCURSOR 
    DEALLOCATE PARKCURSOR 
    END  
END   
END  

ステータスが2である場合、すべての行で、それは4 として更新された3ならば私の度Probがすべての行でそれが7 として更新されているが、かどうかを確認..please私のストアドプロシージャですいくつかは3であり、いくつかは2で、次に最初の行はそこにあります。それに関しては、それはすべての値を更新しています。つまり、1行目が3のステータスを持ち、2行目が2の場合、両方とも4として更新します。それは最初に4と2番目に7.canとして更新する必要があります。

答えて

7

更新プログラムにはwhere節がありません。これらの更新はすべて同じ行セット(localtablenameに一致する問題がある問題2のすべての行)を正確に更新します。

これは、最後のステータスIDがカーソルにどのように格納されているかによって異なります。

+0

ありがとうございました。 – prema

関連する問題