sexta-feira, 26 de abril de 2013

Exportando dados de uma tabela SQL - Update e Inser

Hoje no forum da MSDN postaram uma uma dúvida de como exportar dados de uma tabela do banco de dados SQL Server e gerar um script para inserção e atualização. 

A necessidade da pessoa era poder fazer o Backup de uma tabela em qualquer momento. 

Esse código abaixo resolve esse problema:

static string ExportarDados(string tabela)
        {
            int i, j;
            string res1 = "", res2 = "";

            string queryStrutura = "select syscolumns.xtype,length,isnullable,syscolumns.name from syscolumns,sysobjects where syscolumns.id=sysobjects.id and sysobjects.name='" + tabela + "' order by colid";
            string query = "select * from " + tabela;
            DataTable dt = ObterDados(queryStrutura);
            DataTable d = ObterDados(query);
            DateTime data;
            string sql;
            for (j = 0; j < d.Rows.Count; j++)
            {
                sql = "if (select count(*) from " + tabela + " where " + dt.Rows[0][3].ToString() + "='" + d.Rows[j][0].ToString()  + "')=0 begin\r\n";
                sql += "insert " + tabela + " values(";
                for (i = 0; i < dt.Rows.Count; i++)
                {
                    switch ( dt.Rows[i][0].ToString())
                    {
                        case "35":
                        case "36":
                        case "167":
                        case "175": // campo do tipo texto
                            if (dt.Rows[i][2].ToString() == "1" && d.Rows[j][i] ==null)
                                sql += "null";
                            else
                                sql += "'" + d.Rows[j][i].ToString().Replace("'", "''") + "'";
                            break;
                        case "108": //campo do tipo numérico
                            if (dt.Rows[i][2].ToString() == "1" && d.Rows[j][i] == null)
                                sql += "null";
                            else
                                sql += d.Rows[j][i].ToString();
                            break;
                        case "61": //campo do tipo data
                            if (dt.Rows[i][2].ToString() == "1" && d.Rows[j][i] == null)
                                sql += "null";
                            else
                            {
                                data =DateTime.Parse( d.Rows[j][i].ToString());
                                sql += "convert(datetime,'" + data.Day + "/" + data.Month + "/" + data.Year + " " + data.Hour + ":" + data.Minute + ":" + data.Second + ":" + data.Millisecond + "',103)";
                            }
                            break;
                    }
                    if (i < d.Columns.Count - 1)
                        sql += ",";
                }
                sql += ")\r\nend else begin\r\n";
                sql += "update " + tabela + " set ";
                for (i = 1; i < d.Columns.Count; i++)
                {
                    sql += dt.Rows[i][3].ToString()  + "=";
                    switch (dt.Rows[i][0].ToString())
                    {
                        case "35":
                        case "36":
                        case "167":
                        case "175": // Campos do tipo texto
                            if (dt.Rows[i][2].ToString() == "1" && d.Rows[j][i] == null)
                                sql += "null";
                            else
                                sql += "'" + d.Rows[j][i].ToString().Replace("'", "''") + "'";
                            break;
                        case "108": // campos do tipo numérico
                            if (dt.Rows[i][2].ToString() == "1" && d.Rows[j][i] == null)
                                sql += "null";
                            else
                                sql += d.Rows[j][i].ToString();
                            break;
                        case "61": //campo do tipo data
                            if (dt.Rows[i][2].ToString() == "1" && d.Rows[j][i] == null)
                                sql += "null";
                            else
                            {
                                data = DateTime.Parse( d.Rows[j][i].ToString());
                                sql += "convert(datetime,'" + data.Day + "/" + data.Month + "/" + data.Year + " " + data.Hour + ":" + data.Minute + ":" + data.Second + ":" + data.Millisecond + "',103)";
                            }
                            break;
                    }
                    if (i < d.Columns.Count - 1)
                        sql += ",";
                }
                sql += " where " + dt.Rows[0][3].ToString() + "='" + d.Rows[j][0].ToString() + "'";
                sql += "\r\nend\r\nGO\r\n\r\n";
                res1 += sql;
                if ((j - 15 * (j / 15)) == 0)
                {
                    res2 += res1;
                    res1 = "";
                }
            }
            res2 += res1;
            return res2;
        }

Nenhum comentário:

Postar um comentário