Ir para conteúdo
Seja Membro VIP - Remova Banners de Propagandas, Tenha Liberado Qualquer Download, Além de Acessos em Áreas Exclusivas!! ×
Quer acesso a todas as Áreas do Fórum, até aquelas só para membros VIPs? Também quer poder baixar qualquer ARQUIVO? ×

como desabilitar e habiliatar Constraint


Mauro André

Posts Recomendados


  • Tópicos Que Criei:  65
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  333
  • Conteúdo/Dia:  0.05
  • Reputação:   2
  • Pontos/Conquistas:  2.309
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  46
  • Dispositivo:  Windows

Pessoal,

Como faço para desabilitar as constraint de uma tabela no SQL Server 2000 e como a habilito novamente?

É que tenho que apagar na TMOVCFO o cliente código M102738 e da conflito na Constraint.

SQL

delete TMOVCFO where codcfo = 'M102738'

Erro

Server: Msg 547, Level 16, State 1, Line 1

DELETE statement conflicted with TABLE REFERENCE constraint 'FKTMOV_TMOVCFO'. The conflict occurred in database 'CORPORERM', table 'TMOV'.

The statement has been terminated.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  134
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  1.225
  • Conteúdo/Dia:  0.19
  • Reputação:   2
  • Pontos/Conquistas:  7.400
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Dispositivo:  Windows

use o comando DROP CONSTRAIN svo.nomedaconstraint

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  15
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  95
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Para Desabilitar

ALTER TABLE TMOV

NOCHECK CONSTRAINT FKTMOV_TMOVCFO

Para Habilitar

ALTER TABLE TMOV

CHECK CONSTRAINT FKTMOV_TMOVCFO

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  65
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  333
  • Conteúdo/Dia:  0.05
  • Reputação:   2
  • Pontos/Conquistas:  2.309
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  46
  • Dispositivo:  Windows

Mauricio e Hugo,

Obrigado pelas Dicas.

Valeu.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  134
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  1.225
  • Conteúdo/Dia:  0.19
  • Reputação:   2
  • Pontos/Conquistas:  7.400
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Dispositivo:  Windows

A do hugo e melhor, pois a minha vc teria que criar novamente.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  899
  • Tópicos/Dia:  0.14
  • Meu Conteúdo:  8.841
  • Conteúdo/Dia:  1.34
  • Reputação:   310
  • Pontos/Conquistas:  106.572
  • Conteúdo Resolvido:  0
  • Dias Ganho:  194
  • Status:  Offline
  • Idade:  52
  • Dispositivo:  Android

Se está dando erro de constraint quando vai deletar, ao desativar a mesma, deletar, e reativar, vai dar erro da mesma forma.

Se realmente vc não quer mais este registro na TMOVCFo, vc teria que limpar antes o campo IDMOVCFO da TMOV, deixando-o nulo. Assim, vc poderia deletar a TMOVCFO diretamente sem ter que desabilitar qualquer constraint.

CUIDADO. NÃO SAIAM DESABILITANDO CONSTRAINTS NO BANCO DE DADOS ALEATORIAMENTE.

TEM QUE TER CERTEZA DO QUE ESTÁ FAZENDO PRA ALTERAR A ESTRUTURA DO BANCO. ISSO É A SEGURANÇA DA INTEGRIDADE DO MESMO.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  152
  • Conteúdo/Dia:  0.02
  • Reputação:   0
  • Pontos/Conquistas:  770
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

Só pra completar o comentário do jair, realmente vai dar erro no momento da recriação da constraint, isso porque ela faz uma nova checagem, mas, para isso tem uma alternativa que é o" WITH NOCHECK" no momento da criação/recriação da constraint.

Esse recurso só serve pra isso mesmo, pra ignorar a checagem no momento da criação da constraint. Depois de criada, a constraint fará o seu papel normalmente.

Também recomendo cautela ao manipular constraints.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  79
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  611
  • Conteúdo/Dia:  0.09
  • Reputação:   2
  • Pontos/Conquistas:  3.847
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  54

A melhor forma para isso é sentar o dedo no banco...

quando ele der a mensagem:

DELETE statement conflicted with TABLE REFERENCE constraint 'FKTMOV_TMOVCFO'. The conflict occurred in database 'CORPORERM', table 'TMOV'.

vá até a tabela TMOV e execute o delete do CFO, aí ele vai te dar outra mensagem parecida, vá até a outra tabela, apague os registros de referencia e assim sucessivamente até que não dê mais erro, depois volte e vá apagando tudo o que ficou para trás.

desabilitar constrains, e reabilitá-las sem checagem, pode dar problema no futuro, este é um trabalho braçal, mas é melhor que seja feito assim.

é só uma sugestão :blush:

um abraço

Link para comentar
Compartilhar em outros sites

  • 2 anos depois...

  • Tópicos Que Criei:  23
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  140
  • Conteúdo/Dia:  0.02
  • Reputação:   3
  • Pontos/Conquistas:  983
  • Conteúdo Resolvido:  0
  • Dias Ganho:  3
  • Status:  Offline
  • Idade:  41

Se está dando erro de constraint quando vai deletar, ao desativar a mesma, deletar, e reativar, vai dar erro da mesma forma.

Se realmente vc não quer mais este registro na TMOVCFo, vc teria que limpar antes o campo IDMOVCFO da TMOV, deixando-o nulo. Assim, vc poderia deletar a TMOVCFO diretamente sem ter que desabilitar qualquer constraint.

CUIDADO. NÃO SAIAM DESABILITANDO CONSTRAINTS NO BANCO DE DADOS ALEATORIAMENTE.

TEM QUE TER CERTEZA DO QUE ESTÁ FAZENDO PRA ALTERAR A ESTRUTURA DO BANCO. ISSO É A SEGURANÇA DA INTEGRIDADE DO MESMO.

Achei um script bem interessante nas minhas coisas:

Serve tanto para desabilitar todas as constraint como tb para outras operações...

--Para desabilitar todas as constraints e triggers de todas as tabelas do banco:
exec sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT ALL"
exec sp_msforeachtable "ALTER TABLE ? DISABLE TRIGGER ALL"

--Para habilitar:
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL"
exec sp_msforeachtable "ALTER TABLE ? ENABLE TRIGGER ALL"

Abraço.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  11
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  1.140
  • Conteúdo/Dia:  0.21
  • Reputação:   60
  • Pontos/Conquistas:  6.161
  • Conteúdo Resolvido:  0
  • Dias Ganho:  33
  • Status:  Offline
  • Idade:  42
  • Dispositivo:  Windows

Bom dia Mauro André

Script para desligar constraint

declare @comando nvarchar(255)

declare drop_pks cursor for

select distinct 'alter table ' +

(select s22.name from sysobjects s22 where s22.id = s1.fkeyid ) +

' nocheck constraint '+ s2.name comando

from sysforeignkeys s1 , sysobjects s2

where s2.id = s1.constid

open drop_pks

fetch next from drop_pks into @comando

while @@fetch_status = 0

begin

exec sp_executesql @comando

fetch next from drop_pks into @comando

end

close drop_pks

deallocate drop_pks

esse liga as constraint

declare drop_pks cursor for

select distinct 'alter table ' +

(select s22.name from sysobjects s22 where s22.id = s1.fkeyid ) +

' check constraint '+ s2.name comando

from sysforeignkeys s1 , sysobjects s2

where s2.id = s1.constid

open drop_pks

fetch next from drop_pks into @comando

while @@fetch_status = 0

begin

exec sp_executesql @comando

fetch next from drop_pks into @comando

end

close drop_pks

deallocate drop_pks

Espero ter ajudado

[]'s

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.