На уровне приложения (к сожалению). Я согласен с тем, что правильный способ предотвращения дублирования на уровне базы данных заключается в использовании уникального индекса, но в SQL Server 2005 индекс может быть только 900 байтов, и мое поле varchar (2048) сметает это. 1002 *
Я не знаю, насколько хорошо это будет работать, но я думаю, что вы могли бы написать триггер для обеспечения этого, даже если вы не могли сделать это напрямую с индексом. Что-то вроде:
-- given a table stories(story_id int not null primary key, story varchar(max) not null)
CREATE TRIGGER prevent_plagiarism
ON stories
after INSERT, UPDATE
AS
DECLARE @cnt AS INT
SELECT @cnt = Count(*)
FROM stories
INNER JOIN inserted
ON ( stories.story = inserted.story
AND stories.story_id != inserted.story_id )
IF @cnt > 0
BEGIN
RAISERROR('plagiarism detected',16,1)
ROLLBACK TRANSACTION
END
Кроме того, varchar (2048) звучит для меня подозрительно (некоторые вещи в жизни имеют размер 2048 байт, но это довольно редко); разве это не должен быть varchar (max)?