Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como encontro uma restrição padrão usando INFORMATION_SCHEMA?


Pelo que entendi, as restrições de valor padrão não fazem parte do padrão ISO, portanto, não aparecem em INFORMATION_SCHEMA. INFORMATION_SCHEMA parece ser a melhor escolha para esse 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 da tabela do sistema, que são preteridas no SQL Server 2005 e posteriores.

Abaixo é praticamente o mesmo que a 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 algum 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'