You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:37:03