SQL Server 2012 中 Update FROM子句
首先说明一下需求以及环境 创建Table1以及Table2两张表,并插入一下数据 USE AdventureWorks2012 ; GO GO GO decimal GO NOT GO 1 , 20.0 ),( 2 , 30.0 ); 1 , 0.1 ),( 2 , 0.2 ); 如何通过一个update语句直接使Table2得到以下结果(仅是奇葩业务需求,请勿
首先说明一下需求以及环境
创建Table1以及Table2两张表,并插入一下数据
USE AdventureWorks2012;
GO
GO
GO
decimal
GO
NOT
GO
1, 20.0),(2, 30.0);
1, 0.1),(2, 0.2);
如何通过一个update语句直接使Table2得到以下结果(仅是奇葩业务需求,请勿吐槽)
可以看出请产生的结果集如使用SELECT 仅需使用简单INNER JOIN来获得
SELECT dbo.Table2.ColA,
dbo.Table2.ColB
FROM dbo.Table2
ON (dbo.Table2.ColA = dbo.Table1.ColA);
而对于SQL Server 因为UPDATE 具有From子句 可以写出如下语句,但强烈不建议使用的此方法来进行
UPDATE dbo.Table2
SET dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB
FROM dbo.Table2
ON (dbo.Table2.ColA = dbo.Table1.ColA);
官方解释如下
Use caution when specifying the FROM clause to provide the criteria for the update operation. The results of an UPDATE statement are undefined if the statement includes a FROM clause that is not specified in such a way that only one value is available for each column occurrence that is updated, that is if the UPDATE statement is not deterministic.
指定 FROM 子句为更新操作提供条件时务须小心。 如果 UPDATE 语句包含了未指定每个更新列的位置只有一个可用值的 FROM 子句(换句话说,,如果 UPDATE 语句是不确定性的),则其结果将不明确。
Support for use of the READUNCOMMITTED and NOLOCK hints in the FROM clause that apply to the target table of an UPDATE or DELETE statement will be removed in a future version of SQL Server. Avoid using these hints in this context in new development work, and plan to modify applications that currently use them.
在 SQL Server 的未来版本中,将不再支持在 FROM 子句中使用应用于 UPDATE 或 DELETE 语句目标表的 READUNCOMMITTED 和 NOLOCK 提示。 请避免在新的开发工作上下文中使用这些提示,并计划修改当前使用它们的应用程序。
个人建议使用MERGE来实现此项功能
AS source (ColA,COlB)
ON (target.ColA = source.ColA)
WHEN MATCHED
= target.ColB + source.ColB
;
有兴趣的同学可以将Table1的数据更改如以下
TRUNCATE TABLE table1;
2, 10.0), (1, 20.0),(1, 40.0),(2, 30.0);
使用Update后Table2的结果(注意这是一个未确定性的结果集,不代表可以运行处结果结果一定是正确的)
使用MERGE是结果,这个错误信息很好的阐述的这个错误的原因
Msg 8672, Level 16, State 1, Line 1

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Google Chrome は世界で最も人気のあるブラウザの 1 つであり、多くのユーザーが Windows PC のデフォルトのブラウザとして使用することを好みます。 Chrome はブラウジング体験を楽しく簡単にする幅広い機能を提供しているため、最も信頼できるブラウザの 1 つであり続けています。しかし、他のブラウザと同様に、Chrome にも独自の欠点があり、最も必要なときに同様にバグや不具合が発生する可能性があります。このようなエラーの 1 つはエラー コード 3: 0x80040154 で、これは Google Chrome の更新をチェックするときに発生します。エラー メッセージは次のとおりです。「更新プログラムのチェック中にエラーが発生しました。更新チェックを開始できませんでした (エラー コード 3: 0x80080005) または (エラー

Visual Studio Code (VSCode) を使用していて、ソフトウェアの自動更新を無効にする方法と拡張機能の自動更新を無効にする方法について考えている場合は、この記事をお読みください。 VSCode を頻繁に使用しない場合や、長期間後にエディタを開いて自動更新を有効にしたい場合は、この記事でその方法についても説明します。 VSCode の自動更新を有効または無効にするさまざまな方法について詳しく説明します。目次 方法 1: 設定を使用して VSCode の自動更新を有効/無効にする ステップ 1: VS Code を開き、左下隅にある歯車の形のシンボルをクリックします。ステップ 2: 表示されるリストで「設定」をクリックします。ステップ 3: 検索バーに「update」と入力し、Enter キーを押します。更新の検索: パターン 4

WindowsServerBackup は、WindowsServer オペレーティング システムに付属する機能で、ユーザーが重要なデータとシステム構成を保護し、中小企業、エンタープライズ レベルの企業に完全なバックアップおよび回復ソリューションを提供できるように設計されています。この機能を使用できるのは、Server2022 以降を実行しているユーザーのみです。この記事では、WindowsServerBackup のインストール、アンインストール、またはリセットの方法を説明します。 Windows Server バックアップをリセットする方法 サーバー バックアップで問題が発生したり、バックアップに時間がかかりすぎたり、保存されているファイルにアクセスできない場合は、Windows Server バックアップ設定をリセットすることを検討してください。 Windowsをリセットするには

数回のプレリリースを経て、KDE Plasma 開発チームは 2 月 28 日に、初めて Qt6 フレームワークを使用した Linux および BSD システム用のデスクトップ環境のバージョン 6.0 を発表しました。 KDE Plasma 6.1 には、多数の新機能が追加されました。

win10 システムを使用していると、時々コンピューターがフリーズする状況に遭遇することがありますが、バックグラウンド プロセスを確認すると、Microsoftcompatibilitytelemetry プロセスが特に大量のリソースを消費していることがわかります。ユーザーは、サードパーティの保護ソフトウェアをアンインストールしてから、クリーン ブートを試して動作させることができます。このサイトでは、Microsoftcompatibilitytelemetry の高い CPU 使用率に対する解決策をユーザーに注意深く紹介します。 Microsoftcompatibilitytelemetry の CPU 使用率が高い場合の解決策 方法 1: サードパーティの保護ソフトウェアをアンインストールした後に試す

SQLUPDATE ステートメント Update ステートメントは、テーブル内のデータを変更するために使用されます。構文は次のとおりです。 UPDATE テーブル名 SET 列名 = 新しい値 WHERE 列名 = 特定の値 "person" テーブル: LastNameFirstNameAddressCityGatesBillXuanwumen10BeijingWilsonChamps-Elysees 特定の行の列を更新 UPDATEperson SETFirstName="Fred" WHERELastName="Wilson" 結果: LastNa

MySQL では、UPDATE ステートメントを使用して、1 つ以上のテーブルのデータを変更および更新できます。次の記事は、MySQL での UPDATE の使用方法の詳細を調べるのに役立ちます。

Fitbit Ace LTE は 5 月に正式に発売されましたが、現在は米国でのみ販売されています。このスマートウォッチは特に子供たちを対象としており、子供たちはよりアクティブなライフスタイルを通じてゲームの報酬を受け取ることができ、親は常に子供たちの様子を監視できます。
