Página 1 de 1

erro em PHP / SQL Server

Enviado: 10 Nov 2023 00:56
por cjp
Pessoal,
Depois que mudei uma tabela para o SQL Server, passei a ter eventualmente um erro estranho num Insert no PHP. Vejam a tela em anexo.

Notem que a tabela PRIOR está com ID em Identity (auto-incremento) e, portanto, não deveria jamais colocar o ID duplicado.

A linha 131, que aponto o erro, está assim:

Código: Selecionar todos

 $result = mssql_query($sql);
Não vejo erro aí, e tanto não tem que, na maioria das vezes, não dá erro. Só eventualmente. Só que, quando o erro acontece, acontece repetidamente.

Notei também que, de vez em quando, o ID é colocado com número fora da ordem, o que me parece estranho (embora não seja problema). Quero dizer assim: digamos que a tabela tenha 10 registros, com IDs 1 a 10. Daí, eventualmente, o próximo registro aparece com ID 20, por exemplo, sendo que inserts posteriores usam o ID 11, o 12, o 13... Como disse, isso não é problema, só achei estranho.

Só preciso resolver o erro acima, que ocorre eventualmente.

Alguém saberia me dar uma solução?

erro em PHP / SQL Server

Enviado: 10 Nov 2023 22:05
por cjp
Esqueci de anexar a tela do erro. Segue.

erro em PHP / SQL Server

Enviado: 15 Dez 2023 00:28
por rochinha
Amiguinhos,

cjp qual o conteúdo de $sql?

erro em PHP / SQL Server

Enviado: 15 Dez 2023 07:44
por marco.prodata
cjp escreveu:Pessoal,
Depois que mudei uma tabela para o SQL Server, passei a ter eventualmente um erro estranho num Insert no PHP. Vejam a tela em anexo.
...
Alguém saberia me dar uma solução?
Amigo, não sei se já resolveu, mas alguns bancos costumam usar sequences pra gerar o autoincremento, verifica na sequence qual o current value, se talvez não tenha sido resetado ou alterado, algo do tipo.

erro em PHP / SQL Server

Enviado: 15 Dez 2023 11:18
por cjp
Tem um exemplo na imagem que postei: insert into prior (hrinicio) values ('1015').

Mas o mesmo problema acontecia com todas as querys.

Depois de bastante pesquisa, descobri o problema: frequentemente, ele tentava colocar o id (campo com auto-incremento) com valor 1, gerando o erro, pois já tinha registro na tabela com valor 1. Daí, tentando de novo, ele tentava com 2, depois 3, e assim por diante. Só quando chegava num campo que não tivesse na tabela é que parava de dar erro.

Creio que isso seja um bug do SQL Server, pois, no meu modo de ver, o campo sendo auto-incremento, ele deveria já inserir com valor que não houvesse na tabela.

Como não achei solução pra esse bug, optei por voltar esta tabela para o MySQL.

Curiosamente, este mesmo bug nunca me ocorreu com outras tabelas que uso no SQL Server. O problema só ocorreu nessa tabela.

erro em PHP / SQL Server

Enviado: 15 Dez 2023 14:28
por marco.prodata
O SQL Server trabalha com sequences nos campos auto-increment?

erro em PHP / SQL Server

Enviado: 16 Dez 2023 01:28
por alxsts
Olá!

MS SQL Server contempla tanto Sequences quanto Auto-Increment, que neste SGBDR é chamado de Identity.

Existe uma diferença entre Sequence e identity (Auto-Increment), que precisa ser entendida. As duas opções geram sequências de números mas, os números gerados pela Sequence podem ser usados em qualquer coluna de qualquer tabela do banco de dados, enquanto aqueles gerados em colunas identity só podem ser usados na coluna específica da tabela onde foi definido. Creio que isto se aplique, possivelmente, a todos os SGBDR que oferecem estas duas opções.

O artigo no link abaixo explica muito bem tudo isto, apresentando alguns exemplos de código.SQL Server Sequence