public async Task <JsonResult> SelecionarColunasChaveEstrangeira(string database, string schema, string tabela) { var idServidor = HttpContext.Session.GetInt32("idServidor").Value; Repo.Repositorio repositorio = new Repo.Repositorio(idServidor); var consulta = (await repositorio.RetornarColunasAsync(database, schema, tabela)).Where(p => p.IsChaveEstrangeira).ToList(); List <ColunaChaveEstrangeiraViewModel> colunas = new List <ColunaChaveEstrangeiraViewModel>(); await _tabelaCore.CarregarAsync(tabela, schema, database, idServidor); var id = await repositorio.SelecionarIdConfiguracaoTabelaAsync(database, schema, tabela); string colDescricao = string.Empty; List <string> colsList = null; if (id > 0) { colsList = await repositorio.SelecionarColunasChaveEstrangeiraAsync(id); } if (consulta.Count > 0) { for (int contador = 0; contador < consulta.Count; contador++) { var tabelaReferenciadaChavePrimaria = _tabelaCore.TodasColunas.Where(c => c.Nome == consulta[contador].Nome).FirstOrDefault()?.TabelaReferenciadaChavePrimaria; var colunasTabelaReferenciada = (await repositorio.RetornarColunasAsync(database, schema, tabelaReferenciadaChavePrimaria)).Select(p => p.Nome).ToList(); if (colsList != null) { if (colsList.Where(p => p.Split(":")[0].Equals(consulta[contador].Nome)).FirstOrDefault() != null) { colDescricao = colsList.Where(p => p.Split(":")[0].Equals(consulta[contador].Nome)).FirstOrDefault().Split(":")[1]; } else { colDescricao = consulta[contador].Nome; } } colunas.Add(new ColunaChaveEstrangeiraViewModel() { Nome = consulta[contador].Nome, TabelaReferenciada = consulta[contador].TabelaReferenciada, ColunaReferenciada = consulta[contador].ColunaReferenciada, ColunasTabelaReferenciada = colunasTabelaReferenciada, IndiceColTabelaReferenciada = colunasTabelaReferenciada.IndexOf(colDescricao) == -1 ? 0 : colunasTabelaReferenciada.IndexOf(colDescricao) }); } } return(Json(colunas)); }
public async Task <string> RetornarSelectAsync(string where, bool amostra, bool limitarUm) { var repositorio = new SqlClient.Repositorio(IdServidor); string query = string.Empty; int countTabelasEstrangeiras = 0; const string prefixoAlias = "AL"; var id = await repositorio.SelecionarIdConfiguracaoTabelaAsync(Database, Schema, Nome); string colDescricao = string.Empty; List <string> colsList = null; /* Dá TOP(10) quando não tiver where definido */ if (!limitarUm && where == string.Empty) { amostra = true; } if (id > 0) { colsList = await repositorio.SelecionarColunasChaveEstrangeiraAsync(id); } query = "SELECT " + (amostra ? "TOP(10) " : (limitarUm ? "TOP(1) " : "")); /* Montar Select da PK */ if (Colunas.Where(p => p.IsChavePrimaria).Count() > 0) { for (int i = 0; i < Colunas.Count; i++) { if (Colunas[i].IsChavePrimaria) { query += $"'{Colunas[i].Nome}:' + CAST(AL0.{Colunas[i].Nome} AS VARCHAR) + ';' +"; } } query = query.Remove(query.Length - 8, 8); query += " AS PK, "; } else { query += "'' AS PK, "; } for (int i = 0; i < Colunas.Count; i++) { if (Colunas[i].IsChaveEstrangeira) { countTabelasEstrangeiras++; if (colsList != null) { if (colsList.Where(p => p.Split(":")[0].Equals(Colunas[i].Nome)).FirstOrDefault() != null) { colDescricao = colsList.Where(p => p.Split(":")[0].Equals(Colunas[i].Nome)).FirstOrDefault().Split(":")[1]; } else { colDescricao = Colunas[i].Nome; } } query += $"{prefixoAlias + countTabelasEstrangeiras.ToString()}.{colDescricao}, "; } else { query += prefixoAlias + "0." + Colunas[i].Nome + ", "; } } query = query.Remove(query.Length - 2, 2); query += string.Format(" FROM {0}.{1}.{2} {3} WITH(NOLOCK)", Database, Schema, Nome, prefixoAlias + "0"); if (countTabelasEstrangeiras > 0) { countTabelasEstrangeiras = 0; for (int i = 0; i < Colunas.Count; i++) { if (Colunas[i].IsChaveEstrangeira) { countTabelasEstrangeiras++; query += $" LEFT JOIN {Database}.{Schema}.{Colunas[i].TabelaReferenciadaChavePrimaria} {prefixoAlias + countTabelasEstrangeiras.ToString()} "; query += $" WITH(NOLOCK) ON {prefixoAlias + countTabelasEstrangeiras.ToString()}.{Colunas[i].ColunaReferenciadaChavePrimaria} = {prefixoAlias + "0"}.{Colunas[i].Nome}"; } } } if (!string.IsNullOrWhiteSpace(where)) { query += " WHERE " + where; } return(query); }