2010-09-29 15 views
19

¿Cómo puedo averiguar el valor predeterminado de una columna en una tabla mediante una consulta SQL?Servidor SQL: descubra el valor predeterminado de una columna con una consulta

Mediante el uso de este procedimiento almacenado:

sp_columns @tablename 

consigo alguna información sobre las columnas de una tabla en particular, pero el valor por defecto de las columnas no se encuentra, ¿Cómo puedo conseguirlo?

Respuesta

48

Usted puede encontrar la definición almacenado con el siguiente (recuerde ajustar el nombre de la columna y la tabla para encontrar a ser los relevantes a su entorno!)

SELECT object_definition(default_object_id) AS definition 
FROM sys.columns 
WHERE name  ='colname' 
AND object_id = object_id('dbo.tablename') 
+1

Esto no devuelve nada para mí en el servidor sql 2008 ... y sé de hecho que mi sch Los nombres de ema/tabla/campo son correctos y existe un defecto. – Amalgovinus

+0

@Amalgovinus definitivamente funciona. ¿Lo está ejecutando en el contexto correcto de la base de datos? ¿La cuenta en la que está ejecutando la consulta tiene suficientes permisos para ver la definición? –

+0

Sí, no tenía permisos. En otras circunstancias, Mssql es lo suficientemente "agradable" para decirte que no puedes acceder a elementos como los simbolos, etc., pero en este caso solo pretende que no hay nada que mostrar si no estás usando una base de datos en la que tienes permiso. . Tuve que establecer una base de datos predeterminada para que esto funcione. http://stackoverflow.com/questions/362434/how-can-i-change-my-default-database-in-sql-server-without-using-ms-sql-server-m – Amalgovinus

14

Uso:

SELECT so.name AS table_name, 
      sc.name AS column_name, 
      sm.text AS default_value 
    FROM sys.sysobjects so 
    JOIN sys.syscolumns sc ON sc.id = so.id 
LEFT JOIN sys.syscomments sm ON sm.id = sc.cdefault 
    WHERE so.xtype = 'U' 
     AND so.name = @yourtable 
ORDER BY so.[name], sc.colid 
7

I use INFORMATION_SCHEMA:

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLUMN_DEFAULT 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = @SchemaName 
    AND TABLE_NAME = @TableName 
    AND COLUMN_NAME = @ColumnName 
Cuestiones relacionadas