我有一个在列中有默认值的表。该默认值在column_default
表的information_schema.columns
列中可见,但在sys.default_constraints
视图中未显示。
有人可以说为什么会这样吗?
答案 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_constraints
,sys.columns
,sys.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
相关代码