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

Откуда:
Сообщений: 2028
Всем доброго времени суток.
Обобщенная ситуация: Есть таблица, которая по крайнем мере содержит один ключ UNIQUE (может быть как на одну колонку, так и на несколько). Как можно в рамках одной транзакции поменять ключи у таких записей местами?

Например:
id UniqueKeyColumn ValueColumn
1 3 test1
2 2 test2

На выходе должно быть:
id UniqueKeyColumn ValueColumn
1 2 test1
2 3 test2


Так же стоит учесть, что UniqueKeyColumn может быть к тому же еще и ForeignKey и вариант через третье уникальное значение в данном случае не подойдет.
К тому же ключ может состоять из 2х и более колонок (при чем каждая может быть еще и ForeignKey).

Кто-нибудь сталкивался с такой задачей?
Была идея перекидывать все остальные значения полей помимо уникальных ключей (в том числе и PrimaryKey, IDENTITY_INSERT ON)
24 окт 11, 08:31    [11486855]     Ответить | Цитировать Сообщить модератору
 Re: Поменять уникальные значения у строк местами  [new]
Glory
Member

Откуда:
Сообщений: 104751
update mytable set UniqueKeyColumn = case when UniqueKeyColumn = 3 then 2 when UniqueKeyColumn=2 the 3 else UniqueKeyColumn end
24 окт 11, 10:06    [11487013]     Ответить | Цитировать Сообщить модератору
 Re: Поменять уникальные значения у строк местами  [new]
iljy
Member

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

а вы пробовали вообще сделать-то прежде чем писать?
use tempdb
drop table T1 drop table refT
go
create table refT(id int primary key, val int)
insert refT values(2,1),(3,2)
create table t1(id int primary key, UniqueKeyColumn int unique foreign key references refT(id), ValueColumn varchar(100))
insert t1 values (1, 3, 'test1'),(2, 2, 'test2')
 
update t1 set UniqueKeyColumn = 5-UniqueKeyColumn

select * from t1

На более сложные случаи вместо "третьего уникального значения" можно использовать NULL.
24 окт 11, 10:11    [11487028]     Ответить | Цитировать Сообщить модератору
 Re: Поменять уникальные значения у строк местами  [new]
LameUser
Member

Откуда:
Сообщений: 2028
Glory,

Большое спасибо, ваш вариант очень помог. И вообще всем спасибо.

До этого пытался обновить след образом:

begin tran
..
update table set column = value1 where idRecord  = @idRecord1
update table set column = value2 where idRecord  = @idRecord2
...

commit tran
27 окт 11, 12:38    [11508139]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить