2016-11-02 6 views
1

置換機能を使用して更新を実行するクエリがあります。例:SQL Server - 一度に多くのレコードを置換機能で一度に更新する

Update my_table set mycolumn=replace(my_column,@OldServer,@NewServer) 

私が達成しようとしているのは、一度に多くの行を更新しようとしています。一度に2つの行を実行したいとしましょう。ここに私が試したことがあります

use mydb 
DECLARE @OldServer1 varchar(255) 

DECLARE @OldServer2 varchar(255) 

DECLARE @NewServer1 varchar(255) 

DECLARE @NewServer1 varchar(255) 



--Edit these values 

SET @OldServer = 'abc' 

SET @NewServer = 'ghi' 

print 'My Table' 

set rowcount 2 

update my_table 
set my_column=replace(my_column, @OldServer, @NewServer) 

while @@rowcount>0 

Begin 

Set Rowcount 2 
update my_table 
set my_column=replace(my_column, @OldServer, @NewServer) 

END 
Set Rowcount 0 

何が起こるかは、テーブルが2つの行だけによって更新され、何度も何度もループすることです。私は交換がすべてを想定していると思っています。私もトップカウントを試して、それは同じことをやった。どのように私の目標を達成することができますか?

+1

二 'update' – Lamak

+0

@LamakでNewServer' @ my_columnは<>取り替えるので、私はそれよりも多くのテキストがあることを前提とし...' NOT LIKE'がええ@JohnHC – JohnHC

+0

方が良いだろう使用WHERE '追加あなたは正しいですが、 'update'に条件を追加して、すでに更新された行をフィルターに掛けるという考え方でした。 – Lamak

答えて

0

ありSQLテーブルには自然行番号はありませんので、あなたが行う必要があります1

@StartNo INTを宣言します。 declare @EndNo INT; declare @LastNo INT;

set @StartNo = 1; 
set @EndNo = 2; 
set @LastNo = (select count(*) from My_Table); 

while @StartNo <= @LastNo 
begin 
with CTE as 
    (
    select M1.*, row_number() over (order by OrderColumn) as Row_Ord 
    from My_Table 
) 
update CTE 
set My_Column = replace(my_column, @OldServer, @NewServer) 
where Row_Ord between @StartNo and @EndNo; 

set @StartNo = @EndNo + 2; 
set @EndNo = @EndNo + 2; 

end 
関連する問題