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