2013-10-29 3 views
0

iSeries 시스템에서 매일 데이터 추출을 모니터링하기 위해 동적 SQL을 사용하여 여러 테이블에서 데이터 세트를 검색합니다. 동적 SQL에서 @@ ROWCOUNT 사용

나는 잘 작동 아래의 동적 SQL 코드를 가지고 있지만, 데이터가 내가

를 사용하여 시도 날 너무

-- Create a table variable to store user data 
DECLARE @myTable TABLE 
(
    docID INT IDENTITY(1,1), 
    docRef VARCHAR(50), 
    letterDir VARCHAR(500) 
); 

insert @myTable select docRef, saveDir from alpsMaster.dbo.uConfigData 

-- Get the number of rows in the looping table 
DECLARE @RowCount INT, @SQL nvarchar(500), @LoopSQL nvarchar(2000), @Date varchar(20) 

set @Date='29 Oct 2013' 
SET @RowCount = (SELECT COUNT(docID) FROM @myTable) 

-- Declare an iterator 
DECLARE @I INT 

-- Initialize the iterator 
SET @I = 1 

-- Loop through the rows of a table @myTable 
WHILE (@I <= @RowCount) 
    BEGIN 
    -- Declare variables to hold the data which we get after looping each record 

    DECLARE @docRef VARCHAR(10), @saveDir VARCHAR(500) 

    -- Get the data from table and set to variables 
    SELECT @docRef = docref FROM @myTable WHERE docID = @I 
    SELECT @saveDir = letterDir FROM @myTable WHERE docID = @I 

    -- Display the looped data 
    --PRINT 'Row No = ' + CONVERT(VARCHAR(2), @I) + '; docRef = ' + @docRef 

select @LoopSQL=' 
use alpsProduction; 
declare @SQL nvarchar(500); 

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(''[dbo].['[email protected]+']'')) 
    begin 

    if exists(select * from sys.columns 
     where Name = ''YPTMPID'' and Object_ID = OBJECT_ID(''[dbo].['[email protected]+']'')) 
     begin 

      set @SQL=''SELECT t.template_name,'''''[email protected]+''''', Y.* 
      FROM [alpsProduction].[dbo].'[email protected]+' Y, alpsMaster.dbo.uDocumentTemplates t 
       where DTEINP='''''[email protected]+''''' and t.template_Id=y.YPTMPID and t.docRef='''''[email protected]+''''''' 


      exec sp_executesql @SQL 

      end 
    end 
    ' 
    --print @LoopSQL 
    exec sp_executesql @LoopSQL 

    -- Increment the iterator 
    SET @I = @I + 1 
END 

추출 된 경우 I는 각 테이블의 기록을 얻을 수있는 데이터를 실행하려면

IF @@ROWCOUNT >0 
    Begin 
     exec sp_executesql @SQL 
    end 

하지만 @@ Rowcount를 채우지 않는 것처럼 보입니다.

뭐죠 전용 (@docRef로 식별) 현재 테이블이

답변

1

하는 것은 SQL을 실행하는 작업을 만듭니다 (형식 DD의 음의 YYYY에서) 오늘날의 날짜 그것의 레코드가있는 경우 그 진술 (exec sp_executesql @SQL)를 실행하는 가장 좋은 방법 현재 하루에 삽입 된 데이터를 확인하고 sp를 실행해야하는 스크립트. 이렇게.

IF EXISTS (SELECT * FROM @TABLE T WHERE DATEDIFF(DD, GETUTCDATE(), T.CREATEDON) = 0) 
BEGIN 
    EXEC SP_EXECUTESQL @SQL 
END