Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
vso Member Откуда: СПб Сообщений: 270 |
Всем добрый день! Может кто подскажет как во время обновления обойти ограничение на уникальность? Поясню, есть индекс на уникальность по 3 полям: Page, REF_REV, RefList. Сделано для того чтобы Page был всегда уникален в пределах REF_REV и RefList. Во время выполнения скрипта UPDATE ListVolume SET PAGE = CASE WHEN ID_LISTVOLUME = @ID_IN THEN @SPage ELSE PAGE - 1 END FROM (SELECT LV.ID_LISTVOLUME FROM ListVolume LV WHERE REF_REV = @LIMIT AND ISNULL(Ref_ListVolume, -1) = -1 AND PAGE BETWEEN @SPage AND @EPage ORDER BY PAGE DESC) AS lv WHERE lv.ID_LISTVOLUME = ListVolume.ID_LISTVOLUME надо обойти проверку на уникальность, может кто подскажет варианты? |
15 окт 14, 15:44 [16708264] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Удалить/отключить уникальный индекс или констрейнт. Или поправить код, чтобы он не писал дубликаты. |
15 окт 14, 15:46 [16708280] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4805 |
Обойти на время апдейта? Зачем? А после апдейта там опять всё будет правильно? Вот это вам надо? ALTER TABLE foo NOCHECK CONSTRAINT CK_foo_column ALTER TABLE foo CHECK CONSTRAINT FK_something |
15 окт 14, 15:48 [16708297] Ответить | Цитировать Сообщить модератору |
vso Member Откуда: СПб Сообщений: 270 |
Чтобы просто пересортировать значения. |
||
15 окт 14, 15:56 [16708368] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
|
||||
15 окт 14, 16:24 [16708656] Ответить | Цитировать Сообщить модератору |
vso Member Откуда: СПб Сообщений: 270 |
iap, ну мне надо, скажем, поднять страницу выше, а номер по порядку и признак сортировки это одно и тоже |
15 окт 14, 16:27 [16708687] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
![]() Почему сразу не проапдейтить всё, что надо? |
||
15 окт 14, 16:33 [16708748] Ответить | Цитировать Сообщить модератору |
vso Member Откуда: СПб Сообщений: 270 |
iap, я же привел код как я делаю |
15 окт 14, 16:56 [16708967] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11568 |
это вы так пейджинг что ли пытаетесь реализовать? может поищите решение через CTE |
15 окт 14, 17:01 [16709007] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
А что это за ORDER BY в подзапросе? Зачем? |
||
15 окт 14, 17:12 [16709076] Ответить | Цитировать Сообщить модератору |
vso Member Откуда: СПб Сообщений: 270 |
iap, Чтобы приращение начиналось с максимального значения. Т.е. я присваиваю максимальному значению минимальное, а потом последовательно сдвигаю последующие значения |
15 окт 14, 17:52 [16709397] Ответить | Цитировать Сообщить модератору |
Konst_One Member Откуда: Сообщений: 11568 |
Declare @PageNumber int = 3, @PageSize int = 2 declare @Table as table (Id int primary key) insert into @Table (Id) select 1 as id union all select 2 union all select 3 union all select 4 union all select 5 declare @Offset int set @Offset = (@PageNumber - 1) * @PageSize + 1 --ROW_NUMBER with CTE and JOIN with T as (select Id, row_number() over (order by Id desc) as row_number from @Table) select T1.* from T join @Table T1 on T.Id = T1.Id where row_number between @Offset and @Offset + @PageSize - 1; |
15 окт 14, 17:55 [16709414] Ответить | Цитировать Сообщить модератору |
WarAnt Member Откуда: Питер Сообщений: 2423 |
Веткин Сергей, Если версия сервера позволяет DECLARE @StartingRowNumber tinyint = 1 , @FetchRows tinyint = 8; SELECT DepartmentID, Name, GroupName FROM HumanResources.Department ORDER BY DepartmentID ASC OFFSET @StartingRowNumber ROWS FETCH NEXT @FetchRows ROWS ONLY; |
15 окт 14, 19:02 [16709733] Ответить | Цитировать Сообщить модератору |
vso Member Откуда: СПб Сообщений: 270 |
WarAnt, к сожалению версия не проходит. Но если Вам не трудно, подскажите как это поможет обойти уникальный индекс? |
15 окт 14, 23:04 [16710858] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |