Boa noite srs.

Criei uma procedure que faz um insert select em uma tabela e está dando erro de primary key duplicada:

Msg 2627, Level 14, State 1, Line 7
Violation of PRIMARY KEY constraint 'PK_NFiscalItem_xx12'. Cannot insert duplicate key in object 'dbo.NFISCALITEMteste'.
The statement has been terminated.

O problema é que a consulta funciona, e não está atingindo a chave por completo,

Abaixo está a estrutura da tabela e a a procedure... por favor me deem um help ai...

Tabela:

CREATE TABLE [dbo].[NFiscalItemTeste](
    [Empresa] [varchar](2) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [Filial] [varchar](2) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [Cgcemissor] [varchar](14) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [Serie] [varchar](2) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [NumNF] [float] NOT NULL,
    [NItem] [int] NOT NULL,
    [CodProduto_ID] [int] NOT NULL,
 CONSTRAINT [PK_NFiscalItem_xx12] PRIMARY KEY CLUSTERED
(
    [Empresa] ASC,
    [Filial] ASC,
    [Cgcemissor] ASC,
    [Serie] ASC,
    [NumNF] ASC,
    [NItem] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO

Procedure:

declare @SERIE                AS CHAR(2)    
dECLARE @NUMERO        AS INTEGER

set @serie = 'N2'
set @numero = '454719'

INSERT INTO NFISCALITEMteste
    SELECT DNI.EmpresaOR, DNI.FilialOr, Fl.CGC, @SERIE AS Series, @NUMERO AS NumNF,
    rank() OVER (ORDER BY dni.codproduto_id) as NItem, DNI.CodProduto_ID

    FROM INT_DevNotaItem DNI
    INNER JOIN FILIAIS FL ON FL.FILIAL = DNI.FILIALOR
    INNER JOIN CLIENTES CL ON CL.CGC = DNI.CGCEMISSOROR
    INNER JOIN INT_DevNota DN ON DN.NRDEV = DNI.NRDEV AND convert(varchar, DN.DTDEV, 103) = convert(varchar, DNI.DTDEV, 103)
    AND DN.EMPRESAOR = DNI.EMPRESAOR AND DN.FILIALOR = DNI.FILIALOR
    INNER JOIN ORCAMENTOITEM OI ON OI.CODORCAMENTO_ID = DN.CODORCAMENTO_ID AND OI.CODPRODUTO_ID = DNI.CODPRODUTO_ID AND
    OI.CODFABRICANTE_ID = DNI.CODFABRICANTE_ID

    WHERE DNI.EMPRESAOR = '01' AND DNI.FILIALOR = '02' AND DNI.CGCEMISSOROR = '61155529000179' AND
          DN.CODORCAMENTO_ID = 1223958

Exibições: 200

As respostas para este tópico estão encerradas.

Respostas a este tópico

Sem o retorno do SELECT fica difícil ajudar, rs.

Como assim Léo???

Léo Biscassi disse:

Sem o retorno do SELECT fica difícil ajudar, rs.

deve estar dando um produto cartesiano e trazendo o mesmo código ou a modelagem está com uma falha na parte de chaves, verifica se não esta vindo o mesmo código.

Pessoal, boa tarde.

Encontrei o que estava dando de errado.

Na minha consulta eu busco o código do produto em várias notas, onde o mesmo código aparece várias vezes. No meu teste apareceu um código repetido duas vezes e como eu utilizo o rank() para gerar o código do item, aconteceu quando repetiu o produto, gerou o mesmo item duas vezes item "5 , 5" ao invés de criar o item "5, 6".

Correção: utilizei o 'ROW_NUMBER ( )' ao invés do 'Rank()'.

Obrigado a todos... Vlw Ermani...

RSS

© 2017   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço