Sök…


Introduktion

INSERT INTO-satset används för att infoga nya poster i en tabell.

INSERT Hello World IN bordet

CREATE TABLE MyTableName
(
    Id INT,
    MyColumnName NVARCHAR(1000)
)
GO

INSERT INTO MyTableName (Id, MyColumnName)
VALUES (1, N'Hello World!')
GO    

INSERT på specifika kolumner

För att göra en infogning i specifika kolumner (i motsats till dem alla) måste du ange de kolumner du vill uppdatera.

INSERT INTO USERS (FIRST_NAME, LAST_NAME)
VALUES ('Stephen', 'Jiang');

Detta fungerar bara om kolumnerna som du inte listade är nullable, identitet, datastämpel för tidstämpel eller beräknade kolumner; eller kolumner som har en standardvärdesbegränsning. Därför, om någon av dem är icke-nullable, icke-identitet, icke-tidsstämpel, icke-beräknade, icke-standardvärderade kolumner ... kommer du att försöka den här typen av infoga utlösa ett felmeddelande som säger att du måste ange en värde för tillämpliga fält.

INSTÄLLNING flera rader med data

Så här sätter du in flera rader med data i SQL Server 2008 eller senare:

INSERT INTO USERS VALUES
(2, 'Michael', 'Blythe'),
(3, 'Linda', 'Mitchell'),
(4, 'Jillian', 'Carson'),
(5, 'Garrett', 'Vargas');

För att infoga flera rader med data i tidigare versioner av SQL Server använder du "UNION ALL" så:

INSERT INTO USERS (FIRST_NAME, LAST_NAME)
SELECT 'James', 'Bond' UNION ALL
SELECT 'Miss', 'Moneypenny' UNION ALL
SELECT 'Raoul', 'Silva'

Observera att sökordet "INTO" är valfritt i INSERT-frågor. En annan varning är att SQL-server bara stöder 1000 rader i en INSERT så att du måste dela dem i batchar.

SKAFFA en enda rad med data

En enda rad med data kan infogas på två sätt:

INSERT INTO USERS(Id, FirstName, LastName)
VALUES (1, 'Mike', 'Jones');

Eller

INSERT INTO USERS
VALUES (1, 'Mike', 'Jones');

Observera att det andra inläggsatset bara tillåter värden i exakt samma ordning som tabellkolumnerna medan i det första inlägget kan ordningen på värdena ändras som:

INSERT INTO USERS(FirstName, LastName, Id)
VALUES ('Mike', 'Jones', 1);

Använd OUTPUT för att få det nya id

När du sätter in kan du använda OUTPUT INSERTED.ColumnName att hämta värden från den nyinförda raden, till exempel den nyligen genererade id - användbar om du har en IDENTITY kolumn eller någon form av standard eller beräknat värde.

När du programmatiskt ringer detta (t.ex. från ADO.net) skulle du behandla det som en normal fråga och läsa värdena som om du skulle ha gjort en SELECT -statement.

-- CREATE TABLE OutputTest ([Id] INT NOT NULL PRIMARY KEY IDENTITY, [Name] NVARCHAR(50))

INSERT INTO OutputTest ([Name])
OUTPUT INSERTED.[Id]
VALUES ('Testing')

Om ID för den nyligen tillagda raden krävs inom samma uppsättning fråga eller lagrad procedur.

-- CREATE a table variable having column with the same datatype of the ID

DECLARE @LastId TABLE ( id int);

INSERT INTO OutputTest ([Name])
OUTPUT INSERTED.[Id] INTO @LastId
VALUES ('Testing')

SELECT id FROM @LastId

-- We can set the value in a variable and use later in procedure

DECLARE @LatestId int = (SELECT id FROM @LastId)

INSERT från SELECT Query Results

Så här infogar du data som hämtats från SQL-frågan (en eller flera rader)

INSERT INTO Table_name (FirstName, LastName, Position)
SELECT FirstName, LastName, 'student' FROM Another_table_name

Observera att 'student' i SELECT är en strängkonstant som kommer att infogas i varje rad.

Vid behov kan du välja och infoga data från / i samma tabell



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow