如何使用Microsoft SMO设置非空bit列默认值?创建表时出错求助
问题描述
尝试使用Microsoft SMO(C#)为非空bit列设置默认值,但创建表时报错。当前代码如下:
if (!string.IsNullOrWhiteSpace(dynamicColumn.DefaultValue)) { column.Default = dynamicColumn.DefaultValue; }
创建表时收到错误:
多个错误发生。
表'CustomDocument.TestDef9_Data'创建失败。
执行Transact-SQL语句或批处理时发生异常。
默认值'((0))'不存在。
尝试过((0))、(0)和0,均出现相同错误。
解决方案
SMO中不能直接通过Column.Default属性设置默认值,正确的做法是创建DefaultConstraint对象,将其关联到目标列,再添加到表的DefaultConstraints集合中。
示例代码如下:
if (!string.IsNullOrWhiteSpace(dynamicColumn.DefaultValue)) { // 创建默认约束对象 DefaultConstraint defaultConstraint = new DefaultConstraint(); defaultConstraint.Name = $"DF_{column.Name}"; // 约束名需符合SQL命名规范 defaultConstraint.Text = dynamicColumn.DefaultValue; // 直接传'0'即可 defaultConstraint.Columns.Add(column); // 关联到目标列 // 将约束添加到表的默认约束集合 table.DefaultConstraints.Add(defaultConstraint); }
注意:
- 约束名称要保证在表内唯一,建议按
DF_列名的格式命名 - 给
Text属性传的值直接用"0"即可,无需额外添加括号 - 必须将约束对象添加到表的
DefaultConstraints集合,否则不会生效
内容的提问来源于stack exchange,提问作者zang227
相关产品推荐
相关产品推荐

