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

VLOŽTE HODNOTY KAM NEEXISTUJE

Můžete to udělat pomocí IF prohlášení:

IF NOT EXISTS 
    (   SELECT  1
        FROM    tblSoftwareTitles 
        WHERE   Softwarename = @SoftwareName 
        AND     SoftwareSystemType = @Softwaretype
    )
    BEGIN
        INSERT tblSoftwareTitles (SoftwareName, SoftwareSystemType) 
        VALUES (@SoftwareName, @SoftwareType) 
    END;

Mohli byste to udělat bez IF pomocí SELECT

INSERT  tblSoftwareTitles (SoftwareName, SoftwareSystemType) 
SELECT  @SoftwareName,@SoftwareType
WHERE   NOT EXISTS 
        (   SELECT  1
            FROM    tblSoftwareTitles 
            WHERE   Softwarename = @SoftwareName 
            AND     SoftwareSystemType = @Softwaretype
        );

Obě metody jsou náchylné na spor, takže i když bych k vložení stále použil jednu z výše uvedených, můžete duplicitní vložky chránit jedinečným omezením:

CREATE UNIQUE NONCLUSTERED INDEX UQ_tblSoftwareTitles_Softwarename_SoftwareSystemType
    ON tblSoftwareTitles (SoftwareName, SoftwareSystemType);

Příklad na SQL-Fiddle

DODATEK

V SQL Server 2008 nebo novějším můžete použít MERGE s HOLDLOCK k odstranění možnosti sporu (který stále není náhradou za jedinečné omezení).

MERGE tblSoftwareTitles WITH (HOLDLOCK) AS t
USING (VALUES (@SoftwareName, @SoftwareType)) AS s (SoftwareName, SoftwareSystemType) 
    ON s.Softwarename = t.SoftwareName 
    AND s.SoftwareSystemType = t.SoftwareSystemType
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (SoftwareName, SoftwareSystemType) 
    VALUES (s.SoftwareName, s.SoftwareSystemType);

Příklad sloučení na SQL Fiddle



  1. Připojte se ke vzdálenému serveru postgresql na amazon ec2

  2. Seznam prvků formátu Datetime v Oracle

  3. Počet řádků ovlivněných UPDATE v PL/SQL

  4. Jak úplně odstranit MySQL z Ubuntu