ERP – Rotina – ODBC SqlState: 23000 Native Error Code: 2627 Error Message: [Microsoft][SQL Native Client][SQL Server]Violation of PRIMARY KEY constraint 'CP_E210SFE'. Cannot insert duplicate key in object 'dbo.E210SFE'. Pocedure: , Line: 1 ODBC SqlState:
Incidente
No módulo Suprimentos, ao tentar executar a inicialização de saldos mensais F210ISM_SECE - Suprimentos / Gestão de Estoques / Controle de Estoque / Saldos / Inicialização de saldos mensais (Inicialização de Saldos Mensais), é apresentada a mensagem: ODBC SqlState: 23000 Native Error Code: 2627 Error Message: [Microsoft][SQL Native Client][SQL Server]Violation of PRIMARY KEY constraint 'CP_E210SFE'. Cannot insert duplicate key in object 'dbo.E210SFE'. Pocedure: , Line: 1 ODBC SqlState: 01000 Native Error Code: 3621 Error Message: [Microsoft][SQL Native Client][SQL Server]The statement has been terminated. Pocedure: , Line: 1 53852 16:35:46 TRANSACTION - ROLLBACK.
Causa
Esta mensagem é apresentada, pois existem espaços nos depósitos, produtos, nos movimentos dos produtos e o o banco de dados SQLServer permite ter espaços.
Solução
Para que a mensagem não seja apresentada ao tentar executar a inicialização de saldos mensais F210ISM, realize os passos a seguir:
1. Realize o processo primeiramente em uma BASE DE TESTES. Após a validação e correção, o mesmo procedimento deve ser aplicado na BASE OFICIAL;
2. Verifique se existe espaço nos campos CodPro, CodDer e CodDep, executando o select abaixo:
SELECT COUNT(*) FROM E210MVP WHERE CODPRO LIKE '% '
SELECT COUNT(*) FROM E210MVP WHERE CODDER <> ' ' AND CODDER LIKE '% '
SELECT COUNT(*) FROM E210MVP WHERE CODDEP LIKE '% '
SELECT COUNT(*) FROM E210MVP WHERE CODLOT LIKE '% '
//
SELECT COUNT(*) FROM E210DLS WHERE CODPRO LIKE '% '
SELECT COUNT(*) FROM E210DLS WHERE CODDER <> ' ' AND CODDER LIKE '% '
SELECT COUNT(*) FROM E210DLS WHERE CODDEP LIKE '% '
SELECT COUNT(*) FROM E210DLS WHERE CODLOT LIKE '% '
//
SELECT COUNT(*) FROM E210EST WHERE CODPRO LIKE '% '
SELECT COUNT(*) FROM E210EST WHERE CODDER <> ' ' AND CODDER LIKE '% '
SELECT COUNT(*) FROM E210EST WHERE CODDEP LIKE '% '
3. Caso algum dos comandos de validação encontre registros com espaços, execute as seguintes atualizações para remover os espaços em branco:
UPDATE E210MVP SET CODPRO = RTRIM(CODPRO) WHERE CODPRO LIKE '% '
UPDATE E210MVP SET CODDER = RTRIM(CODDER) WHERE CODDER <> ' ' AND CODDER LIKE '% '
UPDATE E210MVP SET CODDEP = RTRIM(CODDEP) WHERE CODDEP LIKE '% '
UPDATE E210MVP SET CODLOT = RTRIM(CODLOT) WHERE CODLOT LIKE '% '
//
UPDATE E210DLS SET CODPRO = RTRIM(CODPRO) WHERE CODPRO LIKE '% '
UPDATE E210DLS SET CODDER = RTRIM(CODDER) WHERE CODDER <> ' ' AND CODDER LIKE '% '
UPDATE E210DLS SET CODDEP = RTRIM(CODDEP) WHERE CODDEP LIKE '% '
UPDATE E210DLS SET CODLOT = RTRIM(CODLOT) WHERE CODLOT LIKE '% '
//
UPDATE E210EST SET CODPRO = RTRIM(CODPRO) WHERE CODPRO LIKE '% '
UPDATE E210EST SET CODDER = RTRIM(CODDER) WHERE CODDER <> ' ' AND CODDER LIKE '% '
UPDATE E210EST SET CODDEP = RTRIM(CODDEP) WHERE CODDEP LIKE '% '
4. Reinicializar os saldos mensais e garantir que o sistema funcione conforme o esperado.
Importante
A questão da presença de espaços em campos de texto se deve ao comportamento do SQL Server. Para evitar a ocorrência futura desse problema, um DBA deve verificar e, se necessário, configurar o parâmetro 'ANSI_PADDING' para não aceitar espaços após strings. Essa configuração é crucial para garantir a integridade dos dados no banco.