INSERT INTO / SELECT FROM … Multiple-Values
Wenn man mal eben ein paar Werte / Zeile braucht, um Logiken u.ä. zu testen, dann hat man bis zum MS SQL Server 2005 meist ein temporäre Tabelle angelegt, ein paar Daten eingefügt und die dann verwendet; sah dann so aus:
CREATE TABLE #Dummy
(NumFeld int, Datum datetime);
-- Einzeln per Hand INSERT INTO #Dummy (NumFeld, Datum) VALUES (1, GETDATE());
INSERT INTO #Dummy (NumFeld, Datum) VALUES (2, GETDATE());
INSERT INTO #Dummy (NumFeld, Datum) VALUES (3, GETDATE());
-- oder per SELECT UNION INSERT INTO #Dummy (NumFeld, Datum)
SELECT 4, GETDATE() UNION ALL
SELECT 5, GETDATE() UNION ALL
SELECT 6, GETDATE()
Ab dem MS SQL Server 2008 kann man nun auch „Multiple Values“ angeben. Zugegeben, nicht unbedingt ein riesiges neues Feature, aber es ist recht praktisch, da es Tipparbeit spart.
-- Multiple Values ab MSSQL2008 INSERT INTO #Dummy (NumFeld, Datum)
VALUES (7, GETDATE()),
(8, GETDATE()),
(9, GETDATE())
SELECT * FROM #Dummy
DROP TABLE #Dummy;
GO
Man kann sich nun aber auch die temporäre Tabelle sparen und VALUES gleich als „derivated table“ verwenden, mit dem Alias gibt man dann die Feldnamen an und mit dem ersten VALUES kann man den Datentypen explizit festlegen:
SELECT *
FROM (VALUES(CAST(1 AS smallint), CAST('20090118' as datetime)),
(2, GetDate()),
(3, GetDate())
) AS myValues(NumFeld, Datum)