Microsoft SQL Server
SÄTT IN I
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