2014-12-02 71 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

右键,

我可能有这个错误的(再次) - 通过你的设定你可以循环 - 但似乎因为我不知道的东西比你更想调用一个存储过程了很多将文章传递给你的短片;

-- 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 name FROM SYS.tables where is_merge_published = 1 – user3248190 2014-12-02 16:07:42

+0

是的循环方法不会很快 - 你需要做多少次迭代?你可以在其上运行一个分析器来查看是否有任何索引或者你可以做的任何事情 - 将sys.tables中的数据放入sys.tables中的另一个表中并查看是否有任何索引策略可以更快帮助 – 2014-12-02 16:12:32

+0

它工作的人:) - 非常非常好,我添加了'SET @i = @ i + 1' - 谢谢! – user3248190 2014-12-02 16:14:35

相关问题