sql >> Databáze >  >> RDS >> Sqlserver

Klauzule VALUES na serveru SQL Server

V SQL Server VALUES je konstruktor hodnot tabulky, který specifikuje sadu výrazů hodnoty řádku, které mají být zkonstruovány do tabulky.

VALUES klauzule se často používá s INSERT příkazy pro vkládání dat, ale lze je také použít jako odvozenou tabulku buď v USING klauzule MERGE nebo FROM doložka.

Syntaxe

VALUES ( <row value expression list> ) [ ,...n ]   
  
<row value expression list> ::=  
    {<row value expression> } [ ,...n ]  
  
<row value expression> ::=  
    { DEFAULT | NULL | expression }

Všimněte si, že DEFAULT je povoleno pouze v INSERT prohlášení. DEFAULT přinutí SQL Server vložit výchozí hodnotu definovanou pro sloupec. Pokud pro sloupec neexistuje výchozí nastavení a sloupec umožňuje hodnoty null, NULL je vložen. DEFAULT nelze použít ve sloupcích identity.

Příklady

Zde je několik příkladů, které demonstrují, jak VALUES lze použít v SQL Server.

Použito v INSERT Prohlášení

Zde je příklad použití VALUES klauzule jako součást INSERT prohlášení:

CREATE TABLE Idiots (
    IdiotId int IDENTITY(1,1) NOT NULL,
    FirstName varchar(50),
    LastName varchar(50)
    );

INSERT INTO Idiots VALUES 
    ('Peter', 'Griffin'), 
    ('Homer', 'Simpson'), 
    ('Ned', 'Flanders');

To vytvořilo tabulku s názvem Idiots a vložili do něj tři řádky.

Nyní můžeme použít SELECT příkaz k zobrazení nových hodnot v tabulce:

SELECT * FROM Idiots;

Výsledek:

+-----------+-------------+------------+
| IdiotId   | FirstName   | LastName   |
|-----------+-------------+------------|
| 1         | Peter       | Griffin    |
| 2         | Homer       | Simpson    |
| 3         | Ned         | Flanders   |
+-----------+-------------+------------+

Když VALUES klauzule se používá v INSERT je limit 1000 řádků. Jedním ze způsobů, jak to překonat, je použít VALUES v SELECT příkaz k vytvoření odvozené tabulky. To nás ušetří od nutnosti používat více INSERT nebo hromadné vkládání.

Použito v SELECT Prohlášení

Můžeme použít VALUES k vytvoření odvozené tabulky v FROM doložka. Zde je SELECT prohlášení k prokázání:

SELECT
   FirstName,
   LastName
FROM
   (VALUES 
        (1, 'Peter', 'Griffin'),
        (2, 'Homer', 'Simpson'),
        (3, 'Ned', 'Flanders')
   ) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2;

Výsledek:

+-------------+------------+
| FirstName   | LastName   |
|-------------+------------|
| Homer       | Simpson    |
+-------------+------------+

Odvozené tabulky lze použít k překonání limitu 1000 řádků při vkládání hodnot do databáze.

Použito v MERGE Prohlášení

Zde je příklad VALUES se používá v MERGE prohlášení:

DECLARE @Changes TABLE(Change VARCHAR(20));

MERGE INTO Idiots AS Target  
USING ( VALUES 
            (3, 'Ned', 'Okily Dokily!'), 
            (4, 'Lloyd','Christmas'), 
            (5, 'Harry', 'Dunne')
        ) AS Source ( IdiotId, FirstName, LastName )  
ON Target.IdiotId = Source.IdiotId
AND Target.FirstName = Source.FirstName
WHEN MATCHED THEN
    UPDATE SET FirstName = Source.FirstName, LastName = Source.LastName
WHEN NOT MATCHED BY TARGET THEN
    INSERT (FirstName, LastName) VALUES (Source.FirstName, Source.LastName)
OUTPUT $action INTO @Changes;

SELECT Change, COUNT(*) AS Count  
FROM @Changes  
GROUP BY Change;

Výsledek:

+----------+---------+
| Change   | Count   |
|----------+---------|
| INSERT   | 2       |
| UPDATE   | 1       |
+----------+---------+

V tomto případě byl aktualizován jeden řádek a vloženy dva nové řádky na základě hodnot uvedených v VALUES doložka.

Zde je výsledná tabulka:

SELECT * FROM Idiots;

Výsledek:

+-----------+-------------+---------------+
| IdiotId   | FirstName   | LastName      |
|-----------+-------------+---------------|
| 1         | Peter       | Griffin       |
| 2         | Homer       | Simpson       |
| 3         | Ned         | Okily Dokily! |
| 4         | Lloyd       | Christmas     |
| 5         | Harry       | Dunne         |
+-----------+-------------+---------------+

  1. Vyberte (načtěte) všechny záznamy z více schémat pomocí Postgres

  2. INSERT INTO ... FROM SELECT ... VRACENÍ id mapování

  3. Vyberte číslo řádku v postgresu

  4. Pomocí CRYPT_GEN_RANDOM() vytvořte kryptografické náhodné číslo na serveru SQL Server