2016-02-01 11 views
0

Я новичок в хранимой процедуре.Изменение записи с использованием хранимой процедуры

У меня есть 4 миллиона записей, так что вручную это невозможно, поэтому используйте хранимую процедуру.

У меня есть таблица вроде:

Id Name 
----------------- 
1 abc 
2 xyz 
3 abc 
4 pqr 
5 abc 
6 pqr 

И в этой таблице один поданной называются именем. В столбце Имени, некоторые записи такие же имя, поэтому я хочу, чтобы изменить записи и хочу понравиться:

Id Name 
--------------------- 
1 abc 
2 xyz 
3 abc-1 
4 pqr 
5 abc-2 
6 pqr-1 

& Вставьте ее в другую таблицу, которые имеют одинаковую схему.

+0

ты пытался что-нибудь? –

+0

Итак, вы хотите обновить повторяющиеся данные и вставить данные в новую таблицу? – PKirby

+0

Пожалуйста, смотрите: http://stackoverflow.com/questions/17783906/update-one-of-2-duplicates-in-an-sql-server-database-table – PKirby

ответ

0

Вы можете сделать это с помощью обновляемого КТР:

with toupdate as (
     select t.*, row_number() over (partition by name order by id) as seqnum 
     from onetable t 
    ) 
update toupdate 
    set name = name + '-' + cast(seqnum - 1 as varchar(255)) 
    where seqnum > 1; 

На самом деле, что обновляет его на месте. Чтобы поместить это в другую таблицу:

with toinsert as (
     select t.*, row_number() over (partition by name order by id) as seqnum 
     from onetable t 
    ) 
select id, 
     (case when seqnum = 1 then name 
      else name + '-' + cast(seqnum - 1 as varchar(255)) 
     end) as name 
into newtable 
from toinsert; 
+0

Я не понял код, вы можете PLS decribe, который является процедурой хранения и логикой, где вы пишете. вы можете упростить его. – vatsal

+0

@vatsai. , , Это запросы, которые делают то, что вы хотите. Хранимая процедура не требуется. –

+0

У меня есть таблица abc, которая указала имя (что я объясняю в вопросе) его имеет 10 столбцов и я хочу вставить в имя таблицы xyz, у которого есть 5 столбцов, я хочу вставить имя и значение таблицы abc table в имя таблицы таблицы xyz, entityid как Id abc. с выполнением одного и того же уклонения, которое объясняется в вопросе. что я должен изменить в вашем запросе. Или вы можете мне помочь. – vatsal

0

Это обновит таблицу

;WITH cte AS 
(
    SELECT id, 
     ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Id) AS rno, 

    FROM table1 
) 

update t.Name = t.Name + '-'+ c.rno 
from table1 t 
join cte c on c.id = t.id 
where c.rno >1 

Для вставки просто использовать выберите с charindex

select * into Table2 from table1 
where CHARINDEX('-',name) > 1 
Смежные вопросы