sys默认约束未在sys.default_constraints中列出

时间:2017-05-24 05:53:38

标签: sql sql-server-2008

我有一个在列中有默认值的表。该默认值在column_default表的information_schema.columns列中可见,但在sys.default_constraints视图中未显示。

有人可以说为什么会这样吗?

2 个答案:

答案 0 :(得分:0)

如果INFORMATION_SCHEMA.COLUMNS中的默认值显示为create default X as Y,那么它就作为bound default的一部分存在,这是一种不推荐使用默认值的方法。

它不会出现在sys.default_constraints中,因为它不是更“现代”约束系统的一部分。

答案 1 :(得分:0)

默认约束详细信息显示在using System.Windows; namespace WpfApp1 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { Window winA = new Window(); Window winB = new Window(); Window winC = new Window(); public MainWindow() { InitializeComponent(); winA.Title = "A"; winB.Title = "B"; winC.Title = "C"; winB.Show(); winA.Show(); winC.Show(); } private void Button_Click(object sender, RoutedEventArgs e) { winB.ShowInTaskbar = false; winA.ShowInTaskbar = false; winC.ShowInTaskbar = false; winA.ShowInTaskbar = true; winB.ShowInTaskbar = true; winC.ShowInTaskbar = true; } } } 中。但它不包含它所属的列。

需要加入sys.default_constraintssys.columnssys.objects您才能获得实际的详细信息。我在sys.schemas子句中传递表名以从两个表中获取默认约束详细信息:

WHERE
来自此post

SELECT c.[name], col.[name], c.[definition] FROM sys.default_constraints c INNER JOIN sys.columns col ON col.default_object_id = c.object_id INNER JOIN sys.objects o ON o.object_id = c.parent_object_id INNER JOIN sys.schemas s ON s.schema_id = o.schema_id WHERE o.[name] = 'TableName' GO SELECT column_name, column_default FROM information_schema.columns WHERE Table_name = 'TableName' AND column_default IS NOT NULL GO 相关代码