不允许修改Column对象的DefaultConstraintName属性



我正在尝试使用官方的Microsoft.SqlServer.SharedManagementObjects NuGet包处理一个旧项目,该项目与SMO 2014配合得很好。当我尝试添加或编辑列的默认值时,我写了以下内容:

var server = new Server("(local)");
var database = new Database(server, "test_db");
database.Create();
var table = new Table(database, "test_tbl");
var columnKey = new Column(table, "key", DataType.Int);
columnKey.Identity = true;
columnKey.IdentitySeed = 0;
columnKey.IdentityIncrement = 1;
table.Columns.Add(columnKey);
var columnVal = new Column(table, "val", DataType.Int);
columnVal.AddDefaultConstraint("defVal").Text = "1";
table.Columns.Add(columnVal);
table.Create();
columnVal.DefaultConstraint.Drop();
columnVal.Refresh();
columnVal.AddDefaultConstraint("defVal").Text = "2";
columnVal.Alter();
database.Drop();

Column实例上的最后一个Alter((引发异常:

System.InvalidOperationException:Microsoft SMO在提交期间失败:Microsoft.SqlServer.Management.SMO.FailedOperationException:列"val"的Alter失败。--->Microsoft.SqlServer.Management.Smo.SmoException:不允许修改Column对象的DefaultConstraintName属性。必须删除并重新创建具有所需属性的对象。

"DefaultConstraintName"属性在2016 SMO中不存在(根据官方文件(。这是SMO的错误还是我还能做些什么?

好的,答案是这样的:在COLUMN上添加默认约束需要更改TABLE,而不是更改列,而不是调用columnVal.Alter((我需要调用TABLE.Alter

ALTER TABLE [test_tbl]
ADD CONSTRAINT [defVal] DEFAULT ((2)) FOR [val]

和往常一样,Microsoft框架/库提供了关于实际发生的事情的糟糕信息(请参阅抛出的异常消息(。我希望这对其他人有用。

相关内容

  • 没有找到相关文章

最新更新