2014-12-02 2 views
0

동시에 내 복제의 모든 아티클에 대한 속성을 변경할 수있는 방법이 있습니까?모든 기사에 대해 EXEC sp_changemergearticle

그래서 대신 :

EXEC sp_changemergearticle 
@publication = 'MyPublication', 
@article = 'MyArticle', 
@property = 'published_in_tran_pub', 
@value = 'true'; 

EXEC sp_changemergearticle 
@publication = 'MyPublication', 
@article = 'MyArticle1', 
@property = 'published_in_tran_pub', 
@value = 'true'; 

EXEC sp_changemergearticle 
@publication = 'MyPublication', 
@article = 'MyArticle2', 
@property = 'published_in_tran_pub', 
@value = 'true'; 

EXEC sp_changemergearticle 
@publication = 'MyPublication', 
@article = 'MyArticle3', 
@property = 'published_in_tran_pub', 
@value = 'true'; 

내가 한 쿼리에서 모든 기사의 속성 @published_in_tran_pub을 변경하고 싶습니다.

EXEC sp_changemergearticle 
@publication = 'MyPublication', 
@article = 'ALL ARTICLES', 
@property = 'published_in_tran_pub', 
@value = 'true'; 

그래서 내가 하나의 문에 의해 모든 기사의 @published_in_tran_pub 속성을 변경하려면 :처럼 뭔가. 사전에

덕분에 내가이 (다시) 잘못된있을 수 있습니다

답변

0

마우스 오른쪽 -하지만 난 당신이 많은 sproc에 전화를 원하는 것보다 아무것도 더 잘 모릅니다으로 보이는을 - 당신은 할 수 루프를 당신의 세트를 통해 기사를 읽은 다음 sproc에 전달하십시오.

-- I presume you can get a list of distinct Articles - you dont have to use 
-- a tmp table if they already exist - use that table instead 

SELECT DISTINCT ROW_NUMBER() OVER (ORDER BY Article) as Row_ID, 
       Article 
INTO #Tmp 
FROM MyArticleTable -- Dont know what this is called 
WHERE publication = @publication -- only pick the articles you want to use for this sproc call 

DECLARE @i int = 1 
DECLARE @currentArticle varchar(max) 

WHILE @i <= (SELECT COUNT(*) FROM #Tmp) 
BEGIN 
    SET @currentArticle = (SELECT Article FROM #Tmp WHERE Row_ID = @i) 
    EXEC sp_changemergearticle 
    @publication = 'MyPublication', 
    @article = @currentArticle, 
    @property = 'published_in_tran_pub', 
    @value = 'true' 

SET @i = @i+ 1 

END 
+0

아직 잘 작동하지 않지만 괜찮아 보입니다. 그것은 '실행 쿼리'를 말하는 것을 계속한다 - 지금 5 분 동안 벌써. 쿼리 할 수있는 모든 기사의 목록을 얻으려면 : SELECT 이름 FROM SYS.tables where is_merge_published = 1 – user3248190

+0

예. 루핑 방법은 빠르지 않습니다. 몇 번 반복해야합니까? 프로파일 러를 실행하여 인덱싱이나 할 수있는 작업이 있는지 확인할 수 있습니다. sys.tables의 데이터를 Sys.tables 파일에없는 다른 테이블에 저장하는 것이 더 빠를 수 있으며 인덱싱 전략이 도움이 –

+0

그것은 남자가 작동 :) - 아주 아주 좋은, 나는 'SET @ i = @ i + 1'을 추가했습니다 - 많이 감사드립니다! – user3248190

관련 문제