2016-09-08 4 views
-1

Ich habe eine Tabelle mit einer Identity-Spalte (ArticleID). Ich möchte die letzte Zeile in der Tabelle auswählen und einen Wert in eine bestimmte Spalte (ArticleImage) einfügen. Ich habe bereits den Wert, also muss ich nicht danach fragen. Wo in der SQL-Anweisung setze ich diesen Wert?Syntax für INSERT INTO SELECT-Anweisung

INSERT INTO EasyDNNNews (ArticleImage) 
SELECT TOP 1 FROM EasyDNNNews 
ORDER BY ArticleID DESC 
+2

so, Sie wollen nicht ** einfügen ** eine neue Zeile, möchten Sie ** Update ** ein (die Hinweise für Ihre Antwort sind in den fett gedruckten Worten) – Lamak

+4

Welche SQL - MySQL, MS-Access, SQL Server? Die Antworten variieren manchmal je nach Produkt – dbmitch

+0

@Lamk ... Sie sind richtig. Ich aktualisiere einen Datensatz. Vielen Dank! –

Antwort

1

Wie Kommentatoren angedeutet haben, benötigen Sie eine UPDATE-Anweisung, keine INSERT. UPDATE, aktualisiert einen bereits vorhandenen Datensatz, wobei INSERT einen brandneuen neuen Datensatz erstellt.

Ihre ist ein wenig komplizierter als nur eine UPDATE <table> SET <field>='Somevalue';, da Sie einen bestimmten Datensatz basierend auf einer Sortierung aktualisieren möchten. Sie waren mit Ihrer SELECT TOP 1.. Anfrage in die richtige Richtung unterwegs.

UPDATE EasyDNNNews 
SET ArticleImage = 'YOURVALUE' 
WHERE ArticleID = (SELECT TOP 1 ArticleID FROM EasyDNNNews ORDER BY ArticleID Desc)` 

Diese Unterabfrage ruft das Maximum ArticleID ab. Die äußere UPDATE-Anweisung aktualisiert dann den Articeid-Datensatz und setzt ArticleImage auf den Wert, den Sie dort beibehalten möchten.

+0

das hat super funktioniert. Vielen Dank! –

2

Sie können dies tun mit einer Unterabfrage oder aktualisierbar CTE:

WITH toupdate as (
     SELECT TOP 1 d.* 
     FROM EasyDNNNews d 
     ORDER BY ArticleID DESC 
    ) 
UPDATE toupdate 
    SET ArticleImage = ??; 
+0

Ich wusste nicht, aktualisierbar CTE war sogar eine Sache. Das ist sehr praktisch. – JNevill