"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo evitar registros de bases de datos duplicados utilizando restricciones y desencadenantes únicos?

¿Cómo puedo evitar registros de bases de datos duplicados utilizando restricciones y desencadenantes únicos?

Publicado el 2025-02-26
Navegar:139

How Can I Prevent Duplicate Database Records Using Unique Constraints and Triggers?

use restricciones únicas para evitar registros duplicados

]]

En las operaciones de la base de datos, a menudo es necesario garantizar la singularidad de combinaciones de columnas específicas. Por ejemplo, considere la siguiente tabla:

ID | Name | Active | PersonNumber

agregue restricciones únicas a las tablas existentes

]] Para agregar una restricción única a una tabla existente, puede usar uno de los siguientes métodos:

1.

ALTER TABLA DBO.YOURTABLEname Agregue la restricción uq_yourtableName unique (columna1, column2);

ALTER TABLE dbo.yourtablename
ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);
crea un índice único uq_yourtableName En dbo.yourtableName (column1, column2);

use desencadenantes para evitar la inserción repetida
CREATE UNIQUE INDEX uq_yourtablename
ON dbo.yourtablename(column1, column2);

Crear gatillo dbo.blockduplateYourtable En dbo. tuurtable En lugar de insertar COMO COMENZAR Establecer nocount; Si no existe ( Seleccionar 1 De insertado como yo Inner Únete a dbo. tuurtable como t En i.column1 = t.column1 Y i.column2 = T.Column2 ) COMENZAR Insertar dbo.yourtable (columna1, columna2, ...) Seleccione Columna1, columna2, ... de insertado; FIN DEMÁS COMENZAR Impresión 'No se realizó ninguna acción. '; FIN FIN; IR

Ejemplo: Implementar la singularidad para Personnumber y Active
CREATE TRIGGER dbo.BlockDuplicatesYourTable
ON dbo.YourTable
INSTEAD OF INSERT
AS
BEGIN
  SET NOCOUNT ON;

  IF NOT EXISTS (
    SELECT 1
    FROM inserted AS i
    INNER JOIN dbo.YourTable AS t
    ON i.column1 = t.column1
    AND i.column2 = t.column2
  )
  BEGIN
    INSERT dbo.YourTable(column1, column2, ...)
      SELECT column1, column2, ... FROM inserted;
  END
  ELSE
  BEGIN
    PRINT '未执行任何操作。'; -- 更友好的提示信息
  END
END;
GO

use tempdb; IR Crear tabla dbo.person ( ID int identidad (1,1) clave primaria, Nombre nvarchar (32), Bit activo, Personnumber int ); IR Alter tabla dbo.person Agregar restricción UQ_PERSON UNICA (Personnumber, Active); IR

Ahora, cualquier intento de inserción que viole la restricción única fallará con un mensaje de error, asegurando que no haya un registro duplicado con el mismo número de personal y estados activos.

imprimir 'No se realizó ninguna acción. La instrucción '
USE tempdb;
GO

CREATE TABLE dbo.Person
(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  Name NVARCHAR(32),
  Active BIT,
  PersonNumber INT
);
GO

ALTER TABLE dbo.Person 
  ADD CONSTRAINT uq_Person UNIQUE(PersonNumber, Active);
GO
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3