SQL Server 2008でテーブルエイリアスを使用してUPDATE SQLを書き込む方法


212

私は非常に基本的ですUPDATE SQL-

UPDATE HOLD_TABLE Q SET Q.TITLE = 'TEST' WHERE Q.ID = 101;

このクエリは、に罰金を実行しOracleDerbyMySQL-それは、SQL Server 2008で失敗し 、次のエラーで:

「メッセージ102、レベル15、状態1、行1「Q」付近の構文が正しくありません。」

SQLからエイリアス「Q」をすべて削除すると、機能します。

しかし、私はエイリアスを使用する必要があります。


5
なぜエイリアスを使用する必要があるのですか?それはあなたがそれを必要としているようではないようです。
Mark Byers、2011

5
はい-プログラミングの観点からは必要ありません。しかし、テーブルエイリアスを使用してあらゆる種類のDML SQLを生成する既存/古いライブラリがあります。ライブラリには、一種の複雑なロジックを持つクラスがたくさんあります。ライブラリ内のテーブルエイリアスを取り除くことは、MSSQLで動作するように既存のロジックを微調整するよりも多くの作業です。また、複数のテーブルが関係する場合は、テーブルエイリアスが必要です。
javauser71

回答:


421

SQL Serverの更新ステートメントでエイリアスを使用するための構文は次のとおりです。

UPDATE Q
SET Q.TITLE = 'TEST'
FROM HOLD_TABLE Q
WHERE Q.ID = 101;

ただし、ここではエイリアスは必要ありません。


2
はい !!!できます。迅速な対応に感謝致します。MSSQLサーバーがこのような型破りな更新構文をサポートする理由を知っていますか?
javauser71

3
マーク・バイアーズ-すばらしい答え!! :この構文は、私は私が(ダウンを選択して実行からハイライト)を選択最初の操作を実行してアップデートをテストすることができますコメントアウトSelectステートメント、追加することができますSET Q.TITLE = 'TEST' -- SELECT *

2
いいね。これにより、where句でインテリセンスを使用しやすくなります。
Magnus

それはエイリアスではありません。これは、完全に修飾された「table.column」名です:-/
ScottWelker

17

CTE(Common Tabular Expression)のアプローチをいつでも使用できます。

;WITH updateCTE AS
(
    SELECT ID, TITLE 
    FROM HOLD_TABLE
    WHERE ID = 101
)

UPDATE updateCTE
SET TITLE = 'TEST';

はい-それも動作します。しかし、JDBC / Javaプログラムの場合、これは一種の複雑な構文です。御返答いただき有難うございます。
javauser71

-1

Postgresの特殊なケース

上記のソリューションのリストは私にとってはうまくいきません。それで、Postgresのここでのソリューション

私は火事なので私のクエリ

UPDATE table Q SET Q.is_active = FALSE ,Q.is_delete = TRUE WHERE Q.name = 'XYZ';

結果:エラー:リレーション "テーブル"の列 "q"は存在しません

解決策SETデータ値にallisを使用する必要はないでしょうか

UPDATE table Q SET is_active = FALSE ,is_delete = TRUE WHERE Q.name = 'XYZ';

こんにちはロナック、あなたの答えはPostgresに対するものであり、上記のT-SQLのための実用的な解決策はすでにあります。
AlpiMurányi

hii @AlpiMurányi私の場合、有効な解決策を教えてくれますか。私が実装できるように、私の答えですでにエラーを述べました
Ronak Patel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.