Пример #1
0
        private void TransferData(Table t, Guid? primaryKey)
        {
            StringBuilder sql = new StringBuilder();

            var cols = string.Join(", ", GetColumnList(t.Name));

            if (HasIdentityColumn(t.Name)) {
                SetIdentityInsertOn(t.Name);
            }

            var pkCol = GetPrimaryKeyColumn(t.Name);

            sql.AppendLine(string.Format("insert into [{0}]..[{1}] with(tablock) ({2})", to, t.Name, cols));
            sql.AppendLine(string.Format("select {0}", cols));
            sql.AppendLine(string.Format("from [{0}]..[{1}] a", from, t.Name));
            sql.AppendLine("where 1=1");

            if (primaryKey.HasValue) {
                sql.AppendLine(string.Format("and {0} = '{1}'", pkCol, primaryKey.Value));
            }

            if (t.References.Any()) {
                bool first = true;
                sql.AppendLine("and (");
                foreach(var r in t.References) {
                    if (!first) {
                        sql.AppendLine("OR");
                    }
                    sql.AppendLine("exists(");
                    sql.AppendLine("select 1");
                    sql.AppendLine(string.Format("from [{0}]..[{1}] _a", to, r.ForeignTable.Name));
                    sql.AppendLine(string.Format("where _a.{0} = a.{1}", r.ForeignColumnName, r.ColumnName));
                    sql.AppendLine(")");
                }
                sql.AppendLine(")");
            }

            if(pkCol != null) {
                sql.AppendLine("and not exists(");
                sql.AppendLine("select 1");
                sql.AppendLine(string.Format("from [{0}]..[{1}] _a", to, t.Name));
                sql.AppendLine(string.Format("where _a.{0} = a.{0}", pkCol));
                sql.AppendLine(")");
            }

            RunSQL(sql.ToString(), to);

            if (HasIdentityColumn(t.Name))
            {
                SetIdentityInsertOff(t.Name);
            }
        }
Пример #2
0
        private void Map(Table t)
        {
            if (!Tables.ContainsKey(t.Name)) {
                Tables.Add(t.Name, t);
            }

            foreach (var r in GetReferences(t.Name))
            {
                Map(Tables[r]);
            }
        }