Eu tenho este sql:
ALTER TABLE dbo.ChannelPlayerSkins
DROP CONSTRAINT FK_ChannelPlayerSkins_Channels
mas, aparentemente, em alguns outros bancos de dados que usamos, a restrição tem um nome diferente. Como verifico se há uma restrição com o nome FK_ChannelPlayerSkins_Channels
.
sql-server
information-schema
system-tables
Lieven Cardoen
fonte
fonte
Respostas:
tente isto:
- EDITAR -
Quando eu originalmente respondi a essa pergunta, estava pensando em "Chave estrangeira" porque a pergunta original perguntou sobre como encontrar "FK_ChannelPlayerSkins_Channels". Desde então, muitas pessoas comentaram sobre a descoberta de outras "restrições", aqui estão outras perguntas para isso:
aqui está um método alternativo
Se você precisar de ainda mais informações sobre restrições, consulte o procedimento armazenado no sistema
master.sys.sp_helpconstraint
para ver como obter determinadas informações. Para visualizar o código-fonte usando o SQL Server Management Studio, entre no "Object Explorer". A partir daí, expanda o banco de dados "Mestre", expanda "Programabilidade", "Procedimentos armazenados" e "Procedimentos armazenados do sistema". Você pode encontrar "sys.sp_helpconstraint" e clicar com o botão direito do mouse e selecionar "modificar". Apenas tome cuidado para não salvar nenhuma alteração. Além disso, você pode usar este procedimento armazenado do sistema em qualquer tabela usando-o comoEXEC sp_helpconstraint YourTableNameHere
.fonte
A maneira mais fácil de verificar a existência de uma restrição (e fazer algo como eliminá-la, se existir) é usar a função OBJECT_ID () ...
OBJECT_ID pode ser usado sem o segundo parâmetro ('C' apenas para restrições de verificação) e isso também pode funcionar, mas se o nome da restrição corresponder ao nome de outros objetos no banco de dados, você poderá obter resultados inesperados.
OBJECT_ID também pode ser usado com outras "restrições", como restrições de chave estrangeira ou chave primária, etc. Para obter melhores resultados, sempre inclua o tipo de objeto apropriado como o segundo parâmetro para a função OBJECT_ID:
Tipos de objetos de restrição:
Observe também que o esquema geralmente é necessário. O esquema de restrições geralmente leva o esquema da tabela pai.
A falha em colocar suas restrições (ou o que você estiver verificando) entre colchetes ao usar esse método também pode causar um falso negativo - se o seu objeto usar caracteres incomuns (como a.), Os colchetes serão necessários.
fonte
OBJECTPROPERTY(OBJECT_ID('constraint_name'), 'IsConstraint') = 1
ser compatível com a versão atual até o sql2000. Nodbo
esquema necessário também.Se você estiver procurando por outro tipo de restrição, por exemplo, padrões, deverá usar uma consulta diferente (em Como encontrar uma restrição padrão usando o INFORMAÇÕES_SCHEMA? Respondida por devio ). Usar:
para encontrar uma restrição padrão por nome.
Reuni diferentes verificações 'SE NÃO EXISTE' na minha postagem ' DDL' SE NÃO EXISTE 'condições para tornar os scripts SQL novamente executáveis "
fonte
fonte
Você está olhando algo parecido com isto, abaixo é testado no SQL Server 2005
fonte
Apenas algo a observar ......
No SSMS do SQL Server 2008 R2, o comando "Restrição de script como -> DROP AND CREATE To" produz T-SQL como abaixo
Fora da caixa, esse script NÃO elimina a restrição porque o SELECT retorna 0 linhas. (consulte a publicação Microsoft Connect ).
O nome da restrição padrão está errado, mas entendo que também tem algo a ver com a função OBJECT_ID, pois alterar o nome não resolve o problema.
Para corrigir isso, removi o uso de OBJECT_ID e usei o nome da restrição padrão.
fonte
OBJECT_ID(N'[YourSchema].[DEF_Detail_IsDeleted]')
você tiver 2 restrições com o mesmo nome em esquemas diferentes.Eu uso a consulta a seguir para verificar uma restrição existente antes de criá-la.
Isso consulta a restrição por nome, segmentando um determinado nome de tabela. Espero que isto ajude.
fonte
fonte
fonte
INFORMATION_SCHEMA
é seu amigo. Tem todos os tipos de visualizações que mostram todos os tipos de informações de esquema. Verifique as visualizações do seu sistema. Você encontrará três visões que lidam com restrições, uma delasCHECK_CONSTRAINTS
.fonte
Eu uso isso para verificar se há restrições remotas em uma coluna. Deve ter tudo o que você precisa.
fonte
fonte
Você pode usar o acima com uma ressalva:
É necessário usar o,
name = [Constraint name]
pois uma tabela pode ter várias chaves estrangeiras e ainda não ter a chave estrangeira sendo verificada.fonte