283 votes

Comment écrire UPDATE SQL avec un alias de table en SQL Server 2008 ?

J'ai un UPDATE SQL très basique.

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

Cette requête fonctionne bien avec Oracle, Derby et My-Sql, mais elle ne fonctionne pas échoue dans le serveur SQL 2008 avec l'erreur suivante : "Msg 102, Niveau 15, Etat 1, Ligne 1 Syntaxe incorrecte près de 'Q'."

Si je supprime toutes les occurrences de l'alias "Q" de SQL, cela fonctionne.

Mais j'ai besoin d'utiliser l'alias.

571voto

Mark Byers Points 318575

La syntaxe pour utiliser un alias dans une déclaration de mise à jour sur le serveur SQL est la suivante :

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

L'alias ne devrait cependant pas être nécessaire ici.

21voto

Ryk Points 1546

Vous pouvez toujours prendre le CTE (Common Tabular Expression), approche.

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

UPDATE updateCTE
SET TITLE = 'TEST';

-1voto

Dans certaines circonstances, le fait de ne pas avoir d'alias de table rend le SQL presque illisible. Considérons ici une situation dans laquelle vous mettez à jour une colonne appelée Compte à partir d'une autre table avec une colonne du même nom. Vous devez spécifier le nom de la table, car sinon le nom de la table est ambigu.

update LMDATA.dbo.ExtremelyLongAndContortedTableNameThatYouReallyOnlyWantToSpecifyOnce
set Currency = ac.Currency,
CurrencyID = dc.ID
from LMDATA.dbo.AnotherReallyLongTableNameThatCanBeAliased ac
join dCurrencies dc
on dc.Name = ac.Currency
where LMDATA.dbo.ExtremelyLongAndContortedTableNameThatYouReallyOnlyWantToSpecifyOnce.Account =   ac.Account

Cela devient

update Q
set Q.Currency = ac.Currency,
CurrencyID = dc.ID
from LMDATA.dbo.ExtremelyLongAndContortedTableNameThatYouReallyOnlyWantToSpecifyOnce Q
join LMDATA.dbo.AnotherReallyLongTableNameThatCanBeAliased ac
on Q.Account = ac.Account
join dCurrencies dc
on dc.Name = ac.Currency`

-8voto

jzd Points 17369

Vous n'avez pas besoin de l'alias. Vous pouvez simplement le faire :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X