2017-07-27 8 views

答えて

-1

あなたはそのようなものが好きですか?

create table #t (f varchar(max)) 

insert into #t values ('Xeiou') 
insert into #t values ('Xbcdefghijlmnopq') 
insert into #t values ('X') 

update #t 
set f = 'A' + SUBSTRING(f,2,len(f)-1) 
where f is not null 

select * from #t 

drop table #t 


f 
---------------------- 
Aeiou 
Abcdefghijlmnopq 
A 

これは、varcharフィールドを部分的に更新する唯一の方法です。

3

新しい.WRITEのUPDATE句の一部を使用する必要があります。 under "Updating Large Value Data Types" in the documentationを参照してください。しかし

:データベースの復旧モデルに設定されている場合、最小ログ記録された新しいデータを挿入または追加

」.WRITEアップデート一括ログまたは単純な既存の値が更新されたときに最小限のロギングが使用されていません。 "

...実際にデータを置き換えている場合は、トランザクションログのサイズを減らすことはできません。

しかし、それはTransaction Log documentationによると、以前のUPDATETEXTメソッドとまったく同じです。彼らは両方の最小ログできる操作として言及しているが、いずれの場合も、あなたは更新既存のデータあなたは、最小限のログを取得しない場合:使用して、大きな値のデータ型に

  • 部分的な更新を新しいデータを挿入または追加するときに、UPDATE文の.WRITE句。既存の値が更新されても、最小ロギングは使用されないことに注意してください。大きな値のデータ型の詳細については、「データ型(Transact-SQL)」を参照してください。
  • text、ntext、およびimageデータ型の列に新しいデータを挿入または追加するときは、WRITETEXT文とUPDATETEXT文を使用します。既存の値が更新されても、最小ロギングは使用されないことに注意してください。
+0

UPDATETEXTコマンドのドキュメントは、ロギングを最小化するかどうかを指定していないようです。 https://docs.microsoft.com/en-us/sql/t-sql/queries/updatetext-transact-sqlこの.WRITEツールはOPが望むことをしないかもしれませんが、新しい私。 –

+0

@TabAllemanあなたが興味を持っている場合には、WRITEとWRITETEXT/UPDATETEXTで最小限のログしか得られず、答えを更新した文書が見つかりました。私の漠然とした思い出は正しいです。既存のコンテンツを変更している場合は、いずれの場合も最小限のログしか取得できません。 –

関連する問題