Vous pouvez le faire en utilisant un IF
déclaration :
IF NOT EXISTS
( SELECT 1
FROM tblSoftwareTitles
WHERE Softwarename = @SoftwareName
AND SoftwareSystemType = @Softwaretype
)
BEGIN
INSERT tblSoftwareTitles (SoftwareName, SoftwareSystemType)
VALUES (@SoftwareName, @SoftwareType)
END;
Vous pourriez le faire sans IF
en utilisant SELECT
INSERT tblSoftwareTitles (SoftwareName, SoftwareSystemType)
SELECT @SoftwareName,@SoftwareType
WHERE NOT EXISTS
( SELECT 1
FROM tblSoftwareTitles
WHERE Softwarename = @SoftwareName
AND SoftwareSystemType = @Softwaretype
);
Les deux méthodes sont sensibles à une condition de concurrence, donc même si j'utiliserais toujours l'une des méthodes ci-dessus pour insérer, vous pouvez protéger les insertions en double avec une contrainte unique :
CREATE UNIQUE NONCLUSTERED INDEX UQ_tblSoftwareTitles_Softwarename_SoftwareSystemType
ON tblSoftwareTitles (SoftwareName, SoftwareSystemType);
Exemple sur SQL-Fiddle
ADDENDA
Dans SQL Server 2008 ou version ultérieure, vous pouvez utiliser MERGE
avec HOLDLOCK
pour supprimer le risque d'une condition de concurrence (qui ne remplace toujours pas une contrainte unique).
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);
Exemple de fusion sur SQL Fiddle