Hoje, durante um processo de migração de banco de dados Sql 2000 para o 2005, tive que recompilar uma série de procedures no novo ambiente e ao tentar re-compilar uma procedure me deparei com a seguinte mensagem:
Msg 1047, Level 15, State 1, Line 3
Conflicting locking hints specified.
A situação era similar (porém não igual) a esta:
create table teste_locks(
nome varchar(100)
)
go
insert into teste_locks values ('Rodrigo')
insert into teste_locks values ('Marcelo')
insert into teste_locks values ('Scheidt')
go
delete teste_locks with (rowlock)
from teste_locks with (nolock)
Não sei qual a intenção original do desenvolvedor, mas fui obrigado a dar algumas risadas enquanto olhava o script. Observe no delete, o conflito de conceitos: no delete é informado um rowlock e no from um nolock. Imagino que se executamos um rowlock (lock de linha), não podemos especificar que não teremos lock nenhum, que é o que faz o nolock.
Removi o rowlock e tudo funcionou de novo. Imagino como esta proc foi criada da primeira vez, considerando que esta mensagem aparece no Sql Server 2000.
Até a próxima!
Nenhum comentário:
Postar um comentário
Leave your comment here!