2010-09-29 19 views
19

SQL sorgusu kullanarak bir tablodaki bir sütunun varsayılan değerini nasıl bulabilirim? Bunun nasıl alabilirim, ben belirli bir tablo ama eksik sütunların varsayılan değeri sütunlar üzerinde bazı bilgiler almakSQL Server: Sorgu içeren bir sütunun varsayılan değerini öğrenin

sp_columns @tablename 

: Bu saklı yordam kullanarak

?

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 

cevap

48

Aşağıdaki (! Ortamınıza uygun olanları olmak bulmak için sütun ve tablo adını ayarlamayı unutmayın)

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

Bu, SQL Server 2008'de benim için hiçbir şey döndürmez ... ema/tablo/alan adları doğrudur ve aslında bir varsayılan var. – Amalgovinus

+0

@Amalgovinus kesinlikle işe yarıyor. Doğru veritabanı bağlamında mı çalıştırıyorsunuz? Sorguyu çalıştırdığınız hesabın tanımını görmek için yeterli izinleri var mı? –

+0

Evet, izinlerim yoktu. Diğer durumlarda, Mssql, sysobjects gibi şeylere erişemediğinizi söyleyebilecek kadar "güzel" dir, ancak bu durumda, izin aldığınız bir veritabanı kullanmıyorsanız gösterilecek hiçbir şey yokmuş gibi yapar. . Bunun için çalışmak için varsayılan bir veritabanı ayarladım. http://stackoverflow.com/questions/362434/how-can-i-change-my-default-database-in-sql-server-without-using-ms-sql-server-m – Amalgovinus

14

Kullanımı ile saklanan tanımını bulabilirsiniz INFORMATION_SCHEMA kullanın:

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 
7

I: