Usuário com melhor resposta
Excluir tabela sem precisar excluir foreign key

Pergunta
-
Pessoal
Existiria alguma maneira de eu excluir um tabela que tem foreign key com outra tabela, sem precisar excluir esta foreign key, pois logo mais estarei criando novamente está tabela que foi excluida ?Tentei desativar todas as foreign key, mais mesmo desativada ela da a mensagem abaixo de foreign key ?
exec sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT ALL"
Não foi possível descartar o objeto 'dbo.nPRODUTO' porque há referência a ele em uma restrição FOREIGN KEY.
Respostas
-
Neibala,
Então, uma forma seria criar uma nova tabela com os dados e sem qualquer tipo de constraint, fazendo uso do Select Into ou então, migrar os dados para a nova tabela com toda estrutura e constrainst já criadas através do Insert Into....Select.
Você já pensou me fazer assim?
Veja se este exemplo ajuda:
Create Table T1 (Codigo Int Primary key Identity(1,1), Descricao Varchar(10) Default 'Texto....', Valor1 Float Default 1.00, Valor2 SmallInt Default 10) Insert Into T1 Default Values Go 1000 Select * from T1 Go -- Exemplo 1 - Select...Into -- -- Criando uma nova Table com base na Tabela T1 -- Select Codigo, Descricao, Valor2, Valor1, Soma=(Valor1+Valor2) Into T2 From T1 Go Select * from T2 Go -- Exemplo 2 - Insert Into....Select -- -- Eliminando os dados na T2 -- Truncate Table T2 Go -- Inserindo da T1 diretamente para T2 -- Insert Into T2 Select Descricao, Valor2, Valor1, Soma=(Valor1+Valor2) From T1 Go Select * from T2 Go
Analise e verifique todas as recomendações e comentários dos colegas, mas este é uma forma também que pode ser feita.
Depois você poderá definir suas constraints, relacionamentos ou outras necessidades.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
- Editado Junior Galvão - MVPMVP quarta-feira, 6 de agosto de 2014 15:36
- Sugerido como Resposta Jean Carlos Galhardi quarta-feira, 6 de agosto de 2014 16:04
- Marcado como Resposta Durval RamosModerator terça-feira, 14 de outubro de 2014 11:10
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 6 de agosto de 2014 15:25
- Marcado como Resposta Durval RamosModerator terça-feira, 14 de outubro de 2014 11:10
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 6 de agosto de 2014 15:26
- Marcado como Resposta Durval RamosModerator terça-feira, 14 de outubro de 2014 11:10
Todas as Respostas
-
Não é possivel, pois deixaria os dados do catalogo do SQL inconsistente.
Guarde o script de criação dos objetos: tabela, indices, FKs, etc...dessa forma você recria de forma rápida.
Alex Rosa - Premier Field Engineer - Data Platform
Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.
- Editado Alex Rosa [MSFT]Microsoft employee segunda-feira, 4 de agosto de 2014 23:13
- Sugerido como Resposta Jean Carlos Galhardi terça-feira, 5 de agosto de 2014 17:30
-
Alex
A sua opção até valida, mais para o meu caso por mais que fica-se incosistente, mais desce certo iria me ajudar em muito.
Pois assim que fosse excluido estaria criando logo em seguinda, quanto a questão de guardar, devido ser várias bases de locais diferente, não existe um padrão nos nomes.
-
Deleted
- Sugerido como Resposta Jean Carlos Galhardi terça-feira, 5 de agosto de 2014 17:30
-
-
Em termos de modelagem de dados, isso não é necessário, e para bancos de dados com um volume de dados maior, é inviável.
Não é necessário, pois o que prevalece é a ordem das colunas que você coloca no seu T-SQL e não a ordem fisica das colunas na tabela.
Analise a possibilidade de não fazer mais o DROP/CREATE da tabela.
Alex Rosa - Premier Field Engineer - Data Platform
Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.
- Editado Alex Rosa [MSFT]Microsoft employee terça-feira, 5 de agosto de 2014 16:32
- Sugerido como Resposta Jean Carlos Galhardi terça-feira, 5 de agosto de 2014 17:30
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 6 de agosto de 2014 15:25
- Marcado como Resposta Durval RamosModerator terça-feira, 14 de outubro de 2014 11:10
-
Alex
Desde já quero agradece a sua dica, é que como estamos em um processo de migração do SQL Server para uma versão mais nova, e já queria aproveitar para acertar esta ordem, mais estamos aqui analisando qual será a melhor alternativa neste momento.
-
José
Ela infelizmente está com dados, é que estamos em um processo de migração de versão do SQL Server, e já queriamos aproveitar para fazer alguns ajustes, e como envolve algumas tabelas estas alterações são feitas +/- automáticamente, mais agradeço a sua informação.
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 6 de agosto de 2014 15:26
- Marcado como Resposta Durval RamosModerator terça-feira, 14 de outubro de 2014 11:10
-
José
É que o processo deve ser meio automático por script, e como são várias bases de locais diferente, queremos aproveitar a migração para +/- acertar a ordem das colunas, mais tem que ser via script, e como as foreign key nem todas tem o mesmo nome, se eu não consegue excluir me ajudaria de uma maneira, mais no momento criando um script, para varrer todas, exclui e depois criamos todas novamente, já definindo um padrão nos nomes.
-
Em termos de modelagem de dados, isso não é necessário, e para bancos de dados com um volume de dados maior, é inviável.
Não é necessário, pois o que prevalece é a ordem das colunas que você coloca no seu T-SQL e não a ordem fisica das colunas na tabela.
Analise a possibilidade de não fazer mais o DROP/CREATE da tabela.
Alex Rosa - Premier Field Engineer - Data Platform
Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.
Alex,
Concordo plenamente.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
-
Neibala,
Então, uma forma seria criar uma nova tabela com os dados e sem qualquer tipo de constraint, fazendo uso do Select Into ou então, migrar os dados para a nova tabela com toda estrutura e constrainst já criadas através do Insert Into....Select.
Você já pensou me fazer assim?
Veja se este exemplo ajuda:
Create Table T1 (Codigo Int Primary key Identity(1,1), Descricao Varchar(10) Default 'Texto....', Valor1 Float Default 1.00, Valor2 SmallInt Default 10) Insert Into T1 Default Values Go 1000 Select * from T1 Go -- Exemplo 1 - Select...Into -- -- Criando uma nova Table com base na Tabela T1 -- Select Codigo, Descricao, Valor2, Valor1, Soma=(Valor1+Valor2) Into T2 From T1 Go Select * from T2 Go -- Exemplo 2 - Insert Into....Select -- -- Eliminando os dados na T2 -- Truncate Table T2 Go -- Inserindo da T1 diretamente para T2 -- Insert Into T2 Select Descricao, Valor2, Valor1, Soma=(Valor1+Valor2) From T1 Go Select * from T2 Go
Analise e verifique todas as recomendações e comentários dos colegas, mas este é uma forma também que pode ser feita.
Depois você poderá definir suas constraints, relacionamentos ou outras necessidades.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com
- Editado Junior Galvão - MVPMVP quarta-feira, 6 de agosto de 2014 15:36
- Sugerido como Resposta Jean Carlos Galhardi quarta-feira, 6 de agosto de 2014 16:04
- Marcado como Resposta Durval RamosModerator terça-feira, 14 de outubro de 2014 11:10