use restrições exclusivas para evitar registros duplicados
]Nas operações do banco de dados, geralmente é necessário garantir a singularidade de combinações específicas de colunas. Por exemplo, considere a tabela a seguir:
ID | Name | Active | PersonNumber
Adicione restrições exclusivas às tabelas existentes
] Para adicionar uma restrição exclusiva a uma tabela existente, você pode usar um dos seguintes métodos:
1.
alter tabela dbo.yourtablename Adicionar restrição uq_yourtablename exclusivo (column1, column2);
ALTER TABLE dbo.yourtablename
ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);
Crie índice exclusivo uq_yourtablename
No nome dbo.yourtablename (column1, column2); use gatilhos para evitar a inserção repetida
CREATE UNIQUE INDEX uq_yourtablename
ON dbo.yourtablename(column1, column2);
Crie Trigger DBO.blockDUplicatesyourtable No dbo.yourtable Em vez de inserir COMO COMEÇAR Definir nocorre em; Se não existe ( Selecione 1 De inserido como eu Inner Junst DBO.YourTable como t No i.column1 = t.column1 E i.column2 = t.column2 ) COMEÇAR Insira DBO.YourTable (Column1, Column2, ...) Selecione Column1, Column2, ... de inserido; FIM OUTRO COMEÇAR Imprimir 'Nenhuma ação foi realizada. ' - - Informações rápidas mais amigáveis FIM FIM; IR
Exemplo: Implemente a singularidade para o PERSONNUMBRO E ATIVO
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 Crie a tabela dbo.person ( Identidade id int (1,1) chave primária, Nome Nvarchar (32), Bit ativo, PersonNumber Int ); IR Alter tabela dbo.person Adicionar restrição uq_person exclusivo (Pessonesnumber, ativo); IR
Agora, qualquer tentativa de inserção que viole a restrição única falhará com uma mensagem de erro, garantindo que não haja registro duplicado com o mesmo número de personagens e estados ativos.
imprimir 'Nenhuma ação foi executada. A instrução '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
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3