我需要從.Net找到SQL Server 2005或2008數據庫中列的默認值。從C中確定SQL Server數據庫列的默認值#
我第一次嘗試以執行存儲過程:
sp_help @objname
哪裏@objname
是表。然後在返回的第七個表(約束表)中,我將使用constraint_keys
中的值作爲默認約束。當我從SQL Server Management Studio運行這個查詢時,它的行爲像預期的那樣,但是當我從C#代碼運行它時,列constraint_keys
爲空(儘管所有其他列都已填充)。
我的第二次嘗試使用:
SELECT name, [text]
FROM syscomments com
INNER JOIN syscolumns col ON com.id = col.cdefault
WHERE col.id = object_id(@Table)
AND col.cdefault > 0
其中在SQL Server Management Studio中也能正常工作。但是,當我從.Net運行它時,它不返回任何行。
附加:
例Net代碼(使用企業庫):
private DataTable GetDefaults(string tablename string database)
{
var db = DatabaseEL.Create(database);
string sql = @"
SELECT name, [text]
FROM syscomments com
INNER JOIN syscolumns col ON com.id = col.cdefault
WHERE col.id = object_id(@Table)
AND col.cdefault > 0";
using (var command = db.GetSqlStringCommand(sql))
{
db.AddInParameter(command, "@Table", DbType.String, tablename);
return db.ExecuteDataTable(command);
}
}
注意,我現在還試圖從每個鏈接的類似的問題如下:
SELECT
name, object_definition(default_object_id) AS default_value
FROM sys.columns
WHERE object_id = object_id(@Table)
AND default_object_id != 0
and
SELECT
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 = @Table
AND sm.text IS NOT NULL
他們都在SSMS中工作,但在.Net中,前者在default_value
列中有空值,而後者沒有行。
聽起來像是http://stackoverflow.com/q/3817885/559467的副本。這爲您提供了可以從C#運行的SQL語句中的值。如果它沒有默認值,它將不會返回任何內容。 – 2011-02-23 17:43:12
你可以發佈.Net代碼嗎?我沒有任何意義,它是從管理工作室而不是從.Net工作。 – 2011-02-23 17:46:32