Pelo que entendi, as restrições de valor padrão não fazem parte do padrão ISO, então não aparecem em INFORMATION_SCHEMA. INFORMATION_SCHEMA parece ser a melhor escolha para este tipo de tarefa porque é multiplataforma, mas se a informação não estiver disponível, deve-se usar as visualizações do catálogo de objetos (sys. *) Em vez das visualizações de tabela do sistema, que são obsoletas no SQL Server 2005 e mais tarde.
Abaixo está praticamente a mesma resposta de @ user186476. Ele retorna o nome da restrição de valor padrão para uma determinada coluna. (Para usuários que não são do SQL Server, você precisa do nome do padrão para eliminá-lo e, se você não nomear a restrição padrão, o SQL Server cria um nome maluco como "DF_TableN_Colum_95AFE4B5". Para facilitar a alteração seu esquema no futuro, sempre nomeie explicitamente suas restrições!)
-- returns name of a column's default value constraint
SELECT
default_constraints.name
FROM
sys.all_columns
INNER JOIN
sys.tables
ON all_columns.object_id = tables.object_id
INNER JOIN
sys.schemas
ON tables.schema_id = schemas.schema_id
INNER JOIN
sys.default_constraints
ON all_columns.default_object_id = default_constraints.object_id
WHERE
schemas.name = 'dbo'
AND tables.name = 'tablename'
AND all_columns.name = 'columnname'
sys
tabelas e é fácil de lembrar.Você pode usar o seguinte para restringir os resultados ainda mais especificando o nome da tabela e o nome da coluna aos quais a restrição padrão se correlaciona:
fonte
Parece não haver nomes de restrição padrão nas
Information_Schema
visualizações.use
SELECT * FROM sysobjects WHERE xtype = 'D' AND name = @name
para encontrar uma restrição padrão por nomefonte
O script a seguir lista todas as restrições padrão e os valores padrão para as tabelas do usuário no banco de dados em que está sendo executado:
fonte
Se você deseja obter uma restrição pelos nomes de coluna ou tabela, ou deseja obter todas as restrições no banco de dados, procure outras respostas. No entanto, se você está apenas procurando exatamente o que a pergunta pede, a saber, "testar se uma determinada restrição padrão existe ... pelo nome da restrição" , então há uma maneira muito mais fácil.
Aqui está uma resposta preparada para o futuro que não usa a
sysobjects
ou outrassys
tabelas:fonte
fonte
A coluna COLUMN_DEFAULT de INFORMATION_SCHEMA.COLUMNS é o que você está procurando?
fonte
fonte
Necromante.
Se você só precisa verificar se existe uma restrição
padrão (restrição (ões) padrão podem ter nomes diferentes em bancos de dados mal gerenciados),
use INFORMATION_SCHEMA.COLUMNS (column_default):
Se você quiser verificar apenas pelo nome da restrição:
E por último, mas não menos importante, você pode apenas criar uma visualização chamada
INFORMATION_SCHEMA.DEFAULT_CONSTRAINTS:
fonte
Não acho que esteja no INFORMATION_SCHEMA - você provavelmente terá que usar sysobjects ou tabelas / visualizações obsoletas relacionadas.
Você pensaria que haveria um tipo para isso em INFORMATION_SCHEMA.TABLE_CONSTRAINTS, mas não vejo nenhum.
fonte
Provavelmente porque em alguns dos outros SGBDs SQL a "restrição padrão" não é realmente uma restrição, você não encontrará seu nome em "INFORMATION_SCHEMA.TABLE_CONSTRAINTS", então sua melhor aposta é "INFORMATION_SCHEMA.COLUMNS" como outros já mencionaram.
(SQLServer-ignoramus aqui)
A única razão que posso pensar quando você precisa saber o nome da "restrição padrão" é se o SQLServer não oferece suporte ao
"ALTER TABLE xxx ALTER COLUMN yyy SET DEFAULT..."
comando. Mas então você já está em uma zona fora do padrão e deve usar as formas específicas do produto para obter o que precisa.fonte
Que tal usar uma combinação de CHECK_CONSTRAINTS e CONSTRAINT_COLUMN_USAGE:
fonte
Estou usando o script a seguir para recuperar todos os padrões (sp_binddefaults) e todas as restrições padrão com os seguintes scripts:
fonte
Visualização do Catálogo de Objetos : sys.default_constraints
As visualizações do esquema de informações
INFORMATION_SCHEMA
são compatíveis com ANSI, mas as restrições padrão não fazem parte do padrão ISO. O Microsoft SQL Server fornece visualizações do catálogo do sistema para obter informações sobre os metadados de objeto do SQL Server.sys.default_constraints
visualização do catálogo do sistema usada para obter informações sobre as restrições padrão.fonte