あなたの質問で、本質的には何も問題はむしろ大声で抗議にもかかわらず、ありません。あなたの質問は混乱しています。それは大きなノーノです。だから、あなたの問題を実証し、有用な提案を得るためには、あなたの問題を示すスクリプトが一般的には最良の方法です。
あなたの質問に対する短い答えは - できません。ステートメントは全体として成功するか失敗するか。個々の行を個別に更新して特定のエラーを無視したい場合は、それを行うためにtsqlを作成する必要があります。
抗議にもかかわらず、主キーの一部である列を更新する必要がある状況があります。珍しいことですが、非常に珍しいですが、tsqlに関する絶対的な声明にも注意する必要があります。珍しいことをするときは、スキーマ(およびあなたのアプローチ)を見直さなければなりません。あなたの目標を達成するためのより良い方法がある可能性が高いからです。
この場合、ははあなたが達成しようとしていることを本当に考えてください。特定の方法で行のセットを更新したい場合は、文が失敗します。つまり、どこかに欠陥があることを意味します。通常、このエラーは、更新ロジックが正しくないことを意味します。おそらく、正確ではないデータについて何かを想定しているでしょうか?遠くから知ることは不可能です。エラーメッセージには、競合の原因となった値のセットが表示されます。そのため、調査するのに十分な情報が得られるはずです。別のツールとして、提案された更新を示すselect文を記述し、エラーメッセージの値を探します。例えば。
set nocount on;
create table #x (a smallint not null, b smallint not null, c varchar(10) not null, constraint xx primary key(a, b));
insert #x (a, b, c) values (1, 1, 'test'), (1, 2, 'zork');
select * from #x;
update #x set b = 2, c = 'dork';
select a, b, c, cast(2 as smallint) as new_b, 'dork' as new_c
from #x
order by a, new_b;
drop table #x;
MSQLは何を表していますか? mSQL?またはこれはMySQLのタイプミスですか?それともMicrosoft SQL Serverですか?あなたが探しているのは、大語彙でupsertと呼ばれ、構文はDBMSごとに異なります。 –
申し訳ありませんが、私はMicrosoft SQLを意味していました。私はその略語がMicrosoft Sqlのために何であるか分かりません – Tex
Microsoftは2つのDBMS(AFAIK)を持っています:MS AccessとSQL Server。私はあなたがSQL Serverを意味すると思いますか? –