Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как избежать дубликатов ?  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 7007
Есть таблица

CREATE TABLE [dbo].[BankTransfersTable]
(
	[NR]                [int] NOT NULL,
	[Data]              [datetime] NOT NULL,
	[Firma]             [nvarchar](255) NOT NULL,
	[Paskirtis]         [nvarchar](MAX) NOT NULL,
	[Suma]              [money] NOT NULL,
	[sAssignmentNotes]  [nvarchar](1024) NULL,
	[mAssignedSum]      [money] NULL,
	[PakeiteSuma]       [nvarchar](256) NULL,
	[Country]           [char](2) NULL,
	CONSTRAINT [PK_BankTransfersTableTest] PRIMARY KEY CLUSTERED([NR] ASC)WITH (
	    PAD_INDEX = OFF,
	    STATISTICS_NORECOMPUTE = OFF,
	    IGNORE_DUP_KEY = OFF,
	    ALLOW_ROW_LOCKS = ON,
	    ALLOW_PAGE_LOCKS = ON
	) ON [PRIMARY]
) ON [PRIMARY]

Поля NR, Data, Firma, Paskirtis, Suma не должны повотряться. Как реализовать, чтобы сервер не давал вставлять дублирующие записи. Через UNIQUE constraint не удаётся, так как превышен максимальный размер индекса...
29 сен 11, 11:43    [11353579]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Cheerful Calf
Через UNIQUE constraint не удаётся, так как превышен максимальный размер индекса...

Как вы себе представляете уникальность по [nvarchar](MAX) размером в 2Гб ?
29 сен 11, 11:46    [11353604]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Cheerful Calf,
Варианты:
1. Использовать разумные размеры для Paskirtis
2. Триггер
29 сен 11, 11:46    [11353608]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 7007
Glory,
ну её можно урезать и зделать nvarchar(1024), но всё равно размер индекса будет большим.


kDnZP,
Как триггером?
29 сен 11, 11:49    [11353648]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Cheerful Calf
kDnZP,
Как триггером?

Как обычно))). Взять руками и написать.
29 сен 11, 11:54    [11353717]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Cheerful Calf
Glory,
ну её можно урезать и зделать nvarchar(1024), но всё равно размер индекса будет большим.

Вот только не надо путать ошибки с предупреждениями
29 сен 11, 11:54    [11353718]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31962
Cheerful Calf
Через UNIQUE constraint не удаётся, так как превышен максимальный размер индекса...
Для [nvarchar](MAX) выход только в создании дополнительного поля хеша (вычисляемого или реального)
29 сен 11, 11:58    [11353756]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Ба... А сумма то что делает в UQ? Да и прежде, чем UQ навешивать, стоит вернуться на этап проектирования модели, ибо то что приведено, очень похоже на слепок с листа Эксела.
29 сен 11, 12:35    [11354162]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
pkarklin
Ба... А сумма то что делает в UQ? Да и прежде, чем UQ навешивать, стоит вернуться на этап проектирования модели, ибо то что приведено, очень похоже на слепок с листа Эксела.

Там еще и NR включено, которое и так ПК само по себе
29 сен 11, 12:37    [11354181]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 7007
pkarklin,

так и есть, слепок с екселя. но так надо.
29 сен 11, 14:41    [11355492]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Cheerful Calf
pkarklin,

так и есть, слепок с екселя. но так надо.

Так надо - это железный аргумент Бред правда получается феерический, но - надо так надо!
29 сен 11, 14:44    [11355541]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31962
pkarklin
Ба... А сумма то что делает в UQ? Да и прежде, чем UQ навешивать, стоит вернуться на этап проектирования модели, ибо то что приведено, очень похоже на слепок с листа Эксела.
Как я понял, унмкальность должна быть на каждом перечисленном поле в отдельности?

Иначе NR туда странно включать :-)

В общем, Cheerful Calf для начала надо сформулировать требования - длинна полей, что должно быть уникально...
29 сен 11, 15:09    [11355819]     Ответить | Цитировать Сообщить модератору
 Re: Как избежать дубликатов ?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Cheerful Calf,

UNIQUE CONSTRAINT on CHECKSUM(Paskirtis)
30 сен 11, 19:57    [11365737]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить