2014-01-17 3 views
1

UPDATE 문을 사용하여 다른 저장 프로 시저의 결과 필드를 업데이트하려는 저장 프로 시저가 있습니다.SQL - 저장 프로 시저 결과의 필드 업데이트

먼저 저장 프로 시저 :

ALTER PROCEDURE [dbo].[usp_sproc1] 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT * 
    FROM Database1.dbo.tbl_dB1table AS t1 
      INNER JOIN Database2.dbo.tbl_dB2table AS t2 ON t1.field = t2.field 
      INNER JOIN Database3.dbo.tbl_dB3table AS t3 ON t3.field2 = t1.field2 AND t3.field2 = t2.field2 
      INNER JOIN Database4.dbo.tbl_dB4table AS t4 ON t4.field3 = t2.field3 
    WHERE  (field5 = 'c') AND (some_date IS NULL) 
END 

두 번째 저장 프로 시저 :

CREATE PROCEDURE [dbo].[usp_ASCRoadAmericaUpdateDateInternal] 
AS 
BEGIN 
    SET NOCOUNT ON; 
    UPDATE  Database1.dbo.tbl_dB1table 
    SET   spr1.some_date = GETDATE() 
    FROM (EXEC dbo.[usp_sproc1]) AS spr1 
END 

그래서 내가 처음 저장 프로 시저의 결과 집합을 검색 할 다음 오늘 날짜로 Database1.tbl_dB1table에 some_date 필드 업데이트 그러나 첫 x 째 저장 프로시 듀어에서 리턴하는 레코드 만.

첫 번째 저장 프로 시저의 결과를 CURSOR에 덤핑하고 각 레코드를 반복하지 않고이 작업을 수행 할 수 있습니까?

+0

첫 번째 저장 프로 시저의 쿼리를 두 번째 저장 프로 시저의 FROM (..)에 배치합니까? 내 생각은 가능한 한 OOP로 sproc을 재사용함으로써 첫 번째 sproc이 변경되면 두 번째 sproc을 변경할 필요가 없도록 만드는 것이 었습니다. – iJared

+0

죄송합니다. 코드를 편집했습니다. dB 및 테이블 이름을 변경하여 애매하게 만들었고 UPDATE 행에서이를 놓쳤습니다. 두 번째 sproc의 첫 번째 sproc에서 WHERE 절을 사용하려고 시도했지만 조인이 누락되어 첫 번째 sproc이 반환하는 것보다 많은 레코드를 업데이트하려고합니다. – iJared

답변

2
CREATE PROCEDURE dbo.usp_sproc2 
AS 
BEGIN 
    SET NOCOUNT ON; 

    UPDATE t1 
    SET some_date = GETDATE() -- you probably mean CONVERT(DATE, GETDATE())? 
    FROM  Database1.dbo.tbl_dB1table AS t1 
    INNER JOIN Database2.dbo.tbl_dB2table AS t2 
       ON t1.field = t2.field 
    INNER JOIN Database3.dbo.tbl_dB3table AS t3 
       ON t3.field2 = t1.field2 
       AND t3.field2 = t2.field2 
    INNER JOIN Database4.dbo.tbl_dB4table AS t4 
       ON t4.field3 = t2.field3 
    WHERE  (field5 = 'c') AND (t1.some_date IS NULL); 
    -------------^^^^^^ what table does this column come from? 
END 
GO 
+0

굉장! 내가 이걸 생각하는 것보다 멍청한 것 같아. 아론 감사합니다. – iJared