/// <summary> /// 拼接为Table添加列的sql /// </summary> /// <param name="commandText">待拼接的sql</param> public void Build(StringBuilder commandText) { //遍历所有的Column节点 foreach (ColumnNode columnNode in _columnNodes) { //拼接表名 this.AppendAlterTable(commandText, _tableName, _schemaName); //拼接列名 this.AppendAddColumn(commandText, columnNode.ColumnName); //拼接数据类型 commandText.AppendFormat(" {0}", _columnNodeHelper.GetSqlType(columnNode.DataType)); //拼接数据类型长度 if (columnNode.Length != null && columnNode.Decimals != null) { commandText.AppendFormat("({0}, {1})", columnNode.Length, columnNode.Decimals); } else if (columnNode.Length != null) { commandText.AppendFormat("({0})", columnNode.Length); } //拼接默认值 if (columnNode.IsDefault) { string defaultValue = _columnNodeHelper.GetDefaultValue(columnNode.DataType); if (!string.IsNullOrEmpty(defaultValue)) { commandText.AppendFormat(" DEFAULT {0}", defaultValue); } } //拼接换行 commandText.AppendLine(); } }
/// <summary> /// 拼接列 /// </summary> /// <param name="commandText">待拼接的sql</param> /// <param name="columnNode">列</param> protected virtual void AppendColumn(StringBuilder commandText, IColumnNode columnNode) { //拼接列名 this.AppendColumnName(commandText, columnNode.ColumnName); //拼接数据类型 commandText.AppendFormat("\t{0}", _columnNodeHelper.GetSqlType(columnNode.DataType)); //拼接数据类型长度及小数点位数 if (columnNode.Length != null && columnNode.Decimals != null) { commandText.AppendFormat("({0}, {1})", columnNode.Length, columnNode.Decimals); } else if (columnNode.Length != null) { commandText.AppendFormat("({0})", columnNode.Length); } //拼接默认值 if (columnNode.IsDefault) { string defaultValue = _columnNodeHelper.GetDefaultValue(columnNode.DataType); if (!string.IsNullOrEmpty(defaultValue)) { commandText.AppendFormat("\tDEFAULT {0}", defaultValue); } } //拼接主键 if (columnNode.IsPrimary) { commandText.Append("\tPRIMARY KEY"); } //拼接自增列 if (columnNode.IsIdentity) { commandText.AppendFormat("\t{0}", _columnNodeHelper.GetIdentity()); } //拼接是否为空(非主键列才可以定义NULL 或 NOT NULL) if (!columnNode.IsPrimary) { commandText.AppendFormat("\t{0}", columnNode.IsNull ? "NULL" : "NOT NULL"); } }