segunda-feira, 8 de fevereiro de 2010

Conflicting locking hints specified

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!