INSERT-sats

Använd INSERT-satsen om du vill skapa poster i en databastabell. Du kan ange något av följande:

  • En eller flera värdelistor som ska infogas som nya poster

  • En SELECT-sats som kopierar data från en annan tabell som ska infogas som en uppsättning nya poster

Formatet för INSERT-satsen är:

Kopiera
INSERT INTO tabellnamn [(kolumnnamn, ...)] VALUES [(uttr, ...), ...]
INSERT INTO tabellnamn [(kolumnnamn, ...)] SELECT kolumnnamn, ... FROM tabellnamn [WHERE uttr]

Med VALUES

kolumnnamn är en valfri lista över kolumnnamn som ger tillgång till namnet och ordningsföljden för de kolumner vilkas värde anges i instruktionen VALUES. Om du utelämnar kolumnnamn måste listan med uttryck (uttr) ge värden för alla kolumner som är definierade i tabellen. De måste också komma i samma ordningsföljd som kolumnerna definierades i tabellen.

Listan med uttryck (uttr) ger värdena för kolumnerna i en ny post. Om du vill lägga till flera poster anger du en lista med uttryck inom parentes för varje post, avgränsade med kommatecken. Vanligtvis består en lista med uttryck av ett konstant värde för varje kolumn (men listan kan också vara en underfråga). Värden för teckensträngar måste omslutas av enkla citationstecken ('). Om du vill ta med ett enkelt citationstecken i ett värde för en teckensträng som omsluts av enkla citationstecken, använder du två enkla citationstecken tillsammans (t.ex. 'Don''t').

Delfrågor måste omges av parenteser.

Exempel

Infoga två listor med uttryck.

Kopiera
INSERT INTO anst (efternamn, förnamn, anst_id, lön, anst_datum)
   VALUES ('Svenssson', 'Johan', 'E22345', 27500, DATE '2028-06-05'), 
   ('Martinsson', 'Anna', 'E24682', 28500, DATE '2029-09-30')

Den här INSERT-satsen lägger till en post i databastabellen för varje angiven värdelista. I det här fallet har två poster lagts till i databastabellen för anställda, anst. Värden har angetts för fem kolumner. De återstående kolumnerna i tabellen tilldelas ett tomt värde, dvs. Null.

Med SELECT

SELECT-satsen är en fråga som returnerar värden för varje kolumnnamn värde som anges i listan över kolumnnamn. Att använda en SELECT-sats i stället för en lista över värdeuttryck medför att du kan välja en uppsättning rader från en tabell och infoga den i en annan tabell med en enda INSERT-sats.

Exempel

Infoga med hjälp av en SELECT-sats.

Kopiera
INSERT INTO anst1 (förnamn, efternamn, anst_id, avd, lön)
SELECT förnamn, efternamn, anst_id, avd, lön från anst
    WHERE avd = ‘D050'

I den här typen av INSERT-satser måste antalet kolumner som ska infogas matcha antalet kolumner i SELECT-satsen. Listan över kolumner som ska infogas måste motsvara kolumnerna i SELECT-satsen på samma sätt som den måste motsvara en lista över värdeuttryck i den andra typen av INSERT-satser. Exempel: Den första infogade kolumnen motsvarar den första valda kolumnen; den andra infogade kolumnen motsvarar den andra valda, osv.

Storleken och datatypen för dessa motsvarande kolumner måste överensstämma. Varje kolumn i listan SELECT bör ha en datatyp som ODBC- eller JDBC-drivrutinen accepterar vid en vanlig INSERT/UPDATE av den motsvarande kolumnen i listan INSERT. Värdena trunkeras när storleken på värdet i kolumnen i listan SELECT är större än storleken på den motsvarande kolumnen i listan INSERT.

SELECT-satsen beräknas innan några värden infogas.

Kommentarer 

  • I containerfält kan du bara använda INSERT med text, såvida du inte förbereder ett parameteruttryck och strömmar data från programmet. Om du vill använda binära data kan du helt enkelt tilldela filnamnet genom att omge det med enkla citationstecken eller använda funktionen PutAs(). När du anger filnamnet härleds filtypen från filtillägget:

    Kopiera
    INSERT INTO tabellnamn (containernamn) VALUES (? AS 'filnamn.filtillägg')

    Filtyper som inte stöds kommer att sättas in som typen FIL.

    När du använder funktionen PutAs() ska du ange typen: PutAs(col, 'typ'), där värdet typ är en filtyp som stöds enligt beskrivningen i Hämta innehållet i ett containerfält: Funktionen CAST() och funktionen GetAs().

  • kolumnnamn kan även ange en fältrepetition, till exempel lastDates[4].