动态生成物理表
来源:互联网 发布:大智慧外汇软件 编辑:程序博客网 时间:2024/04/28 22:13
public string GetCreatTbSQL(string tbName) { DataTable dt = GetDataTable(tbName); bool bltemp1, bltemp2; bool blpk = false;//是否主键 bool blfk = false;// 是否存在外键 bool blisflag = false; string strColName = "";//获取字段名称 string strDataType = "";//获取字段数据类型 string strDataSize = "";//数据长度 string strAllowNull = "";//是否为空 string strDefaultValue = ""; string strNameofPK = ""; string strFTbName = "";//外键表名 string strFColName = "";//外键字段名 if (dt != null) { StringBuilder sb = new StringBuilder(); #region 判断该表是否已经存在,若存在则删除 sb.AppendLine("IF object_id('[dbo].[" + tbName + "]') IS NOT NULL"); sb.AppendLine("BEGIN"); sb.AppendLine(GetDeletedSql(tbName)); sb.AppendLine("DROP TABLE [dbo].[" + tbName + "]"); sb.AppendLine("END"); #endregion sb.AppendLine("CREATE TABLE [dbo].[" + tbName + "]("); for (int i = 0; i < dt.Rows.Count; i++) { strColName = dt.Rows[i]["ColName"].ToString(); strFTbName = dt.Rows[i]["FTbName"].ToString();//获取外键表名 strFColName = dt.Rows[i]["FColName"].ToString();//获取外键字段名 if (bool.TryParse(dt.Rows[i]["IsPK"].ToString(), out bltemp1)) { blpk = bltemp1; } if (bool.TryParse(dt.Rows[i]["IsFK"].ToString(), out bltemp2)) { blfk = bltemp2; } if (blpk == true) { blisflag = (bool)dt.Rows[i]["IsFlag"]; strNameofPK = strColName;//获得主键字段的名称 if (blisflag == true) { sb.AppendLine(" [" + strColName + "] [int] IDENTITY(" + dt.Rows[i]["FlagGerm"] + "," + dt.Rows[i]["FlagIncremen"] + ") NOT NULL ,"); } else { sb.AppendLine(" [" + strColName + "] [int] NOT NULL ,"); } } else { if (!string.IsNullOrEmpty(dt.Rows[i]["DataSize"].ToString())) { strDataSize = (int)dt.Rows[i]["DataSize"] > 0 ? "(" + dt.Rows[i]["DataSize"] + ")" : ""; } else { strDataSize = ""; } if (!string.IsNullOrEmpty(dt.Rows[i]["AllowNull"].ToString())) { bool blAllowNull = (bool)dt.Rows[i]["AllowNull"]; if (blAllowNull == true) { strAllowNull = "NULL"; } else { strAllowNull = "NOT NULL"; } } strDataType = dt.Rows[i]["DataType"].ToString().ToLower();//在这里没有判断值是否为空,前台一定要验证 if (!string.IsNullOrEmpty(dt.Rows[i]["DefaultValue"].ToString())) { strDefaultValue = dt.Rows[i]["DefaultValue"].ToString().Trim().ToLower(); switch (strDataType) { case "smalldatetime": case "datetime": sb.AppendLine(" [" + strColName + "] [" + strDataType + " ] " + strAllowNull + " CONSTRAINT [DF_" + tbName + "_" + strColName + "] DEFAULT (getdate()) ,"); break; case "nvarchar": case "ntext": sb.AppendLine(" [" + strColName + "] [" + strDataType + " ] " + strDataSize + " " + strAllowNull + " CONSTRAINT [DF_" + tbName + "_" + strColName + "] DEFAULT ( N'" + strDefaultValue + "') ,"); break; case "monney": case "float": case "decimal": case "tinyint": case "smallint": case "int": case "bigint": sb.AppendLine(" [" + strColName + "] [" + strDataType + " ] " + strDataSize + " " + strAllowNull + " CONSTRAINT [DF_" + tbName + "_" + strColName + "] DEFAULT ((" + strDefaultValue + ")) ,"); break; case "char": case "varchar": default: sb.AppendLine(" [" + strColName + "] [" + strDataType + " ] " + strDataSize + " " + strAllowNull + " ,"); break; } } else { sb.AppendLine(" [" + strColName + "] [" + strDataType + "] " + strDataSize + " " + strAllowNull + " ,"); } } } sb.AppendLine("CONSTRAINT [PK_" + tbName + "] PRIMARY KEY CLUSTERED"); sb.AppendLine("("); sb.AppendLine(" [" + strNameofPK + "] ASC"); sb.AppendLine(")WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]"); sb.AppendLine(") ON [PRIMARY]"); sb.AppendLine(); if (blfk == true)//存在外键 { sb.AppendLine("ALTER TABLE [dbo].[" + tbName + "] WITH CHECK ADD CONSTRAINT [FK_" + tbName + "_" + strFTbName + "] FOREIGN KEY ([" + strColName + "])"); sb.AppendLine("REFERENCES [dbo]." + strFTbName + " ([" + strFColName + "])"); sb.AppendLine("ON DELETE CASCADE"); sb.AppendLine("ON UPDATE CASCADE"); sb.AppendLine("ALTER TABLE [dbo].[" + tbName + "] CHECK CONSTRAINT [FK_" + tbName + "_" + strFTbName + "]"); } return sb.ToString(); } else //当没有数据时执行查询操作 return "SELECT * FROM" + tbName; }