Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come faccio a trovare un vincolo predefinito usando INFORMATION_SCHEMA?

A quanto ho capito, i vincoli del valore predefinito non fanno parte dello standard ISO, quindi non vengono visualizzati in INFORMATION_SCHEMA. INFORMATION_SCHEMA sembra la scelta migliore per questo tipo di attività perché è multipiattaforma, ma se le informazioni non sono disponibili si dovrebbero usare le viste del catalogo oggetti (sys.*) invece delle viste della tabella di sistema, che sono deprecate in SQL Server 2005 e successivi.

Di seguito è praticamente lo stesso della risposta di @ user186476. Restituisce il nome del vincolo del valore predefinito per una determinata colonna. (Per gli utenti non SQL Server, è necessario il nome del valore predefinito per eliminarlo e, se non si nomina il vincolo predefinito, SQL Server crea un nome pazzo come "DF_TableN_Colum_95AFE4B5". Per semplificare la modifica il tuo schema in futuro, nomina sempre esplicitamente i tuoi vincoli!)

-- 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'