Генерация уникальных значений - PullRequest
0 голосов
/ 15 ноября 2010

В таблице есть столбец «Ключи». С данными, подобными этим

Key    Name
1      aaa
2      sads
null   asd
null   asd

Теперь мне нужно заменить нулевые значения на 3 и 4. Как я могу это сделать.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2010

В зависимости от того, с какой версией SQL Server вы работаете, вы можете использовать TOP или SET ROWCOUNT, чтобы ограничить UPDATE одной строкой.Примерно так будет работать:

select top 1 * from sysobjects
WHILE @@ROWCOUNT > 0
BEGIN
    UPDATE TOP 1 Keys SET Key = (SELECT MAX(Key) from Keys)+1 WHERE Key is null
END

Но не идеально.Я не могу придумать другой способ обращения к дублирующимся строкам - если только это не одноразовая задача, в этом случае временно добавится столбец IDENTITY.

0 голосов
/ 15 ноября 2010

Если вы можете поместить данные (временно) в отдельную таблицу, вы можете использовать ROW_COUNT ():

declare @Keys table ([Key] int not null, [Name] varchar(50) null);

insert into @Keys ([Key], [Name])
select [Key], [Name]
from   [Keys]
where  [Key] is not null
union all
select [Key] = row_number() over (order by [Name]) + 
               (select max([Key]) from [Keys]),
       [Name]
from   [Keys]
where  [Key] is null;

truncate table [Keys];
insert into [Keys] select * from @Keys;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...