Pergunta

Estou usando o SQL Server 2000, tenho uma situação em que estou copiando dados de uma tabela para outra, a tabela de dados de destino exige que cada linha de nome seja única. Aqui está um exemplo rápido do meu problema

Source table
RowID | Name
1       A
2       B
3       B
4       B
5       C
6       D
7       C

O que eu quero fazer é entregá -lo a isso

Destination table
RowID | Name
1       A
2       B
3       B(2)
4       B(3)
5       C
6       D
7       C(2)

A coluna Nome é uma Varchar (40), qualquer idéia sobre como fazer isso, eu tenho 2561 linhas que duplica isso manualmente, não é uma opção.

Alguma idéia de por onde começar?

Foi útil?

Solução 3

Decidi que não preciso, a partir de 1 sempre, então decidi copiar a contenção da coluna ID da linha no final do produto.

update #Inv
set name = left(rtrim(name), 40-len(RowId)-1) + ' ' + RowId
where name in (SELECT distinct name
               FROM [#Inv] a
               WHERE exists (select [name] from [#Inv] where not [RowId] = a.[RowId] and [name] = a.[name]))

Outras dicas

Se for um contrato de 1 e você criará uma restrição única quando terminar:

Crie uma tabela temporária, selecione o nome do grupo de tabela por nome tendo contagem (*)> 1

SET ROWCOUNT = 1 Atualize a tabela Table Table Table no temp.name = base.name Set Name = Nome + '(1)'

Repita até que seja feito, remova todas (1) entradas

Desculpe, você precisará escrever o SQL real. Se você tivesse SQL2K5, poderá usar row_number () para fazer isso.

Você vai precisar de um cursor.

Algo como abaixo:

CREATE TABLE TempTable ( RowID INT IDENTITY PRIMARY KEY, SomeValue varchar(10))
INSERT INTO TempTable (SomeValue) VALUES( 'A')
INSERT INTO TempTable (SomeValue) VALUES( 'B')
INSERT INTO TempTable (SomeValue) VALUES( 'B')
INSERT INTO TempTable (SomeValue) VALUES( 'B')
INSERT INTO TempTable (SomeValue) VALUES( 'C')
INSERT INTO TempTable (SomeValue) VALUES( 'C')
INSERT INTO TempTable (SomeValue) VALUES( 'D')
INSERT INTO TempTable (SomeValue) VALUES( 'D')
INSERT INTO TempTable (SomeValue) VALUES( 'D')
INSERT INTO TempTable (SomeValue) VALUES( 'D')


CREATE TABLE #Counts (SomeValue varchar(10), ValCount int CONSTRAINT COunts_Unique UNIQUE(SomeValue))
INSERT INTO #Counts(SomeValue, ValCount)
SELECT DISTINCT SomeValue, 0 FROM TempTable

DECLARE @RowID int
DECLARE @SomeValue VARCHAR(10)
DECLARE @ValCount int
DECLARE curs CURSOR for SELECT RowID, SomeValue FROM TempTable ORDER BY RowID ASC
OPEN curs
FETCH NEXT FROM curs into @RowID, @SomeValue
WHILE(@@FETCH_STATUS = 0)
BEGIN
    SELECT @ValCount = ValCount FROM #Counts WHERE SomeValue = @SomeValue
    IF(@ValCount > 0)
    BEGIN
        UPDATE TempTable 
        SET SomeValue = SomeValue + '(' + Convert(varchar, @valCount) + ')'
        WHERE RowID = @RowID
    END

    UPDATE #Counts SET ValCount = ValCount + 1 where SomeValue = @SomeValue

    FETCH NEXT FROM curs into @RowID, @SomeValue
END
CLOSE curs
DEALLOCATE curs

DROP TABLE #Counts
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top