Массовая вставка инкрементных идентификаторов в поле идентификатора varchar - PullRequest
0 голосов
/ 13 марта 2012

Если я запускаю такой запрос:

insert into table (unique_id, column) 
select 
(isnull(max(cast(unique_id as int)), 1) + 1 from table) as id, 
another_column
from another_table

поле unique_id всегда отображается как 1 и не увеличивается.Есть ли способ получить это приращение во время вставки?

ps Это простая версия того, что я делаю, но пример точный

Редактировать: SQL Server 2008

Спасибо

Ответы [ 3 ]

1 голос
/ 13 марта 2012

за mssql 2005 +

insert into [table] (unique_id, [column])  
select  row_number() over (order by another_column) as id,  
another_column from another_table 

или

insert into [table] (unique_id, [column])  
select  row_number() over (order by newid()) as id,  
another_column from another_table 
1 голос
/ 13 марта 2012

Посмотрите на функцию ROW_NUMBER().

INSERT INTO [table] (unique_id, [column])
SELECT      ROW_NUMBER() OVER ( ORDER BY another_column ) AS id,
            another_column
FROM        another_table 

Вот рабочий пример, с которым вы можете поиграть .

Примечание: Это не гарантирует, что идентификатор, который вы генерируете с помощью ROW_NUMBER(), является уникальным в таблице, в которую вы вставляете.

1 голос
/ 13 марта 2012

использовать идентификатор (mssql), auto_increment (mysql) или последовательности (psql / oracle / любая другая правильная БД).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...