If you are not performing a RBAR insert then there are a couple of options. Which works quickest will depend on the shape of your data. The two options below function by either testing to see if the value is already in the table, or merging the two tables together. I've included the merge as sometimes its usefull to be able to add or update rows in one command.
There is good documentation on the merge command widely available.
IF OBJECT_ID('tempdb..#myTbl') IS NOT NULL DROP TABLE #myTbl;
DECLARE @values_to_add_1 TABLE (ExternalId NVARCHAR(14));
DECLARE @values_to_add_2 TABLE (ExternalId NVARCHAR(14));
CREATE TABLE #myTbl (TeamId INT NOT NULL IDENTITY(1000, 1)
, ExternalId NVARCHAR(14)
CONSTRAINT PK_myTbl
PRIMARY KEY (TeamId));
INSERT INTO #myTbl (ExternalId)
VALUES ('DFJK')
, ('LMKG')
, ('PLKM');
INSERT INTO @values_to_add_1
VALUES ('DFJK'), ('1234');
INSERT INTO @values_to_add_2
VALUES ('LMKG'), ('5678');
SET STATISTICS IO, TIME ON;
INSERT INTO #myTbl (ExternalId)
SELECT ExternalId
FROM @values_to_add_1 VTA
WHERE NOT EXISTS (SELECT 1 FROM #myTbl MT WHERE MT.ExternalId = VTA.ExternalId);
MERGE #myTbl Target
USING (SELECT * FROM @values_to_add_2) Source
ON Target.ExternalId = Source.ExternalId
WHEN NOT MATCHED BY TARGET THEN INSERT (ExternalId)
VALUES (Source.ExternalId);
SET STATISTICS IO, TIME OFF;
SELECT * FROM #myTbl
If you are only adding a single row at a time, then depending on how many time you are expecting to hit duplicates the "it's better to ask forgiveness than permission" approach can be quicker. If your writing RBAR, and throwing an error doesn't stop your code then the constraint only has minor overhead.