2017-11-30 7 views
1

enter image description hereTSQL 업데이트 문 실행

나는 다른 테이블을 기반으로 업데이트 된 유지하려는 사용자 정의 필드가있는 테이블이 있습니다. 쿼리 내가 실행하려는 업데이트 문을 구축하고 말할 수 수행하기 위해 나는 다음과 같은 쿼리를

select 
    a + b + c + d + e + f + g + h 
from 
    (select 
     'update gl00100 set USERDEF1 =' as a, 
     '''' + DMA + '''' as b, 
     ', set USERDEF2 =' as c, 
     '''' + Brand + '''' as d, 
     ', set USRDEFS1 =' as e, 
     '''' + convert(char(10), dateopened, 120) + '''' as f, 
     'where actnumbr_2 =' as g, 
     GPStore as h 
    from 
     [192.168.xxx.xx].bi.dbo.store 
    where 
     store <> 0000 and DateOpened is not null) x 

를 만들었습니다. 어떻게 쿼리를 실행 한 다음 결과를 실행할 수 있습니까? 그게 가능한가?

+0

동적 인 SQL –

답변

1

이 시도 :

DECLARE @sql nvarchar(2000) 
DECLARE #crs INSENSITIVE CURSOR FOR 
SELECT 'update gl00100 set USERDEF1 =' as a, ''''+DMA+'''' as b, ', 
    set USERDEF2 =' as c, ''''+Brand+'''' as d, ', set USRDEFS1 =' as e, 
    ''''+convert(char(10),dateopened,120)+'''' as f, 'where actnumbr_2 =' as g, 
    GPStore as h 
from [192.168.xxx.xx].bi.dbo.store where store <> 0000 and DateOpened is not null 
OPEN #crs 
FETCH NEXT FROM #crs INTO @sql 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    EXEC sp_executesql @sql 
    FETCH NEXT FROM #crs INTO @sql 
END 
CLOSE #crs 
DEALLOCATE #crs 
+0

을 사용해야합니다. 고마워요. –

+0

@ShelanPatel : 당신이 초보자이기 때문에. 내 대답이 목표를 성취한다면 받아들이세요. –

0

당신은 JOIN를 사용하기보다는 동적 SQL 문을 구축하고 하나 하나 그들에게 실행이 작업을 수행 할 수 있습니다 당신은 또한 찾을 수 있습니다

UPDATE g 
SET  USERDEF1 = s.DMA, 
     USERDEF2 = s.Brand, 
     USRDEFS1 = s.DateOpened 
FROM gl00100 AS g 
     INNER JOIN [192.168.xxx.xx].bi.dbo.store AS s 
      ON s.GPStore = g.actnumbr_2 
WHERE s.Store <> 0000 
AND  s.DateOpened IS NOT NULL; 

이 사용 더 나은 성능을 얻을 수 OPENQUERY을 사용하면 교차 서버 쿼리에 4 가지 이름을 사용할 때 통계를 활용할 수 없으므로 결국에는 전체 저장소 테이블을 메모리로 끌어 당겨 결국에는 몇 개의 행만 선택하게됩니다. 따라서 다음과 같이 시도해보십시오.

UPDATE g 
SET  USERDEF1 = s.DMA, 
     USERDEF2 = s.Brand, 
     USRDEFS1 = s.DateOpened 
FROM gl00100 AS g 
     INNER JOIN OPENQUERY 
     ( [192.168.xxx.xx], 
      'SELECT DMA, Brand, DateOpened, GPStore 
      FROM bi.dbo.store 
      WHERE store <> 0000 AND DateOpened is not null' 
     ) AS s 
      ON s.GPStore = g.actnumbr_2