ホームページ データベース mysql チュートリアル SQL Server 2012 中 Update FROM子句

SQL Server 2012 中 Update FROM子句

Jun 07, 2016 pm 05:39 PM
from server update

首先说明一下需求以及环境 创建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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

修正: Google Chrome アップデート チェックがエラー コード 3 で失敗しました: 0x80040154 修正: Google Chrome アップデート チェックがエラー コード 3 で失敗しました: 0x80040154 Apr 13, 2023 pm 05:46 PM

修正: Google Chrome アップデート チェックがエラー コード 3 で失敗しました: 0x80040154

VS Code の自動更新を有効/無効にする方法 VS Code の自動更新を有効/無効にする方法 Apr 28, 2023 am 09:28 AM

VS Code の自動更新を有効/無効にする方法

Windows サーバーのバックアップをインストール、アンインストール、リセットする方法 Windows サーバーのバックアップをインストール、アンインストール、リセットする方法 Mar 06, 2024 am 10:37 AM

Windows サーバーのバックアップをインストール、アンインストール、リセットする方法

Microsoft 互換性テレメトリの高い CPU 使用率に対する解決策 Microsoft 互換性テレメトリの高い CPU 使用率に対する解決策 Mar 16, 2024 pm 10:16 PM

Microsoft 互換性テレメトリの高い CPU 使用率に対する解決策

KDE Plasma 6.1 は、人気のある Linux デスクトップに多くの機能強化をもたらします KDE Plasma 6.1 は、人気のある Linux デスクトップに多くの機能強化をもたらします Jun 23, 2024 am 07:54 AM

KDE Plasma 6.1 は、人気のある Linux デスクトップに多くの機能強化をもたらします

Windows Server 2025 プレビュー バージョンがアップデートを歓迎、Microsoft が Insider テスト エクスペリエンスを改善 Windows Server 2025 プレビュー バージョンがアップデートを歓迎、Microsoft が Insider テスト エクスペリエンスを改善 Feb 19, 2024 pm 02:36 PM

Windows Server 2025 プレビュー バージョンがアップデートを歓迎、Microsoft が Insider テスト エクスペリエンスを改善

SQLでのUPDATE文の使い方 SQLでのUPDATE文の使い方 Jun 02, 2023 pm 09:13 PM

SQLでのUPDATE文の使い方

Fitbit Ace LTE が新しいゲーム、非接触型決済、その他の機能を備えたメジャー アップデートを受信 Fitbit Ace LTE が新しいゲーム、非接触型決済、その他の機能を備えたメジャー アップデートを受信 Aug 08, 2024 pm 09:39 PM

Fitbit Ace LTE が新しいゲーム、非接触型決済、その他の機能を備えたメジャー アップデートを受信

See all articles