validar solo repitan repetir repetidos repetido registros registro que mostrar insertar existe evitar duplicidad duplicados datos consulta como agrupar sql sql-server-2008

solo - ¿Cómo evitar valores duplicados para INSERT en SQL?



sql server insertar si no existe (5)

Tengo una mesa llamada:

Delegates

Esta tabla tiene cuatro campos:

ID(Auto increment, Primary) MemberNo, FromYr, ToYr

Estoy insertando con esta consulta:

INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)

Los valores provienen de la entrada del usuario. Un miembro puede ser un delegado para cualquier año, por eso les dejo ingresar como quieran. Pero ahora el problema es que pueden insertar erróneamente un miembro para el mismo año más de 2 veces. Por favor, ayúdame, ¿qué puedo hacer ahora?


Antes de insertar, compruebe si hay un registro con los mismos valores:

if not exists (select * from Delegates d where d.FromYr = @FromYr and d.MemNo = @MemNo) INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr)


Use MERGE

MERGE INTO Delegates D USING (values(@MemNo, @FromYr,@ToYr)) X ([MemNo],[FromYr],[ToYr]) ON (insert unique key join) WHEN NOT MATCHED BY TARGET THEN INSERT ([MemNo],[FromYr],[ToYr])) VALUES (X.[MemNo],X.[FromYr],X.[ToYr]);


realice un procedimiento almacenado que primero verificará si los valores ya están contenidos en el DB. si no están, harás tu inserción. Si simplemente lo ignoran


Puede evitar insertar duplicados con esta simple línea de código:

INSERT INTO Delegates (MemNo, FromYr, ToYr) SELECT @MemNo, @FromYr, @ToYr WHERE NOT EXISTS (SELECT 1 FROM Delegates d WHERE d.MemNo=@MemNo AND d.FromYr=@FromYr)

Si se trata de un entorno de carga elevada donde otro comando podría insertar el duplicado mientras se ejecuta este comando, puede usar la sugerencia WITH(HOLDLOCK) .


Prueba esto, (no lo he verificado)

INSERT INTO Delegates ([MemNo],[FromYr],[ToYr]) values(@MemNo, @FromYr,@ToYr) where @MemNo not in ( SELECT MemNo FROM words WHERE FromYr = @FromYr )