Discussion:
Вставить в таблицу содержимое другой таблицы
(слишком старое сообщение для ответа)
Mike
2005-11-10 19:17:26 UTC
Permalink
Hужно целиком скопировать данные из одной таблицы в другую. Если обе таблицы
находятся в одной базе данных, это делается одним запросом типа:

Insert Into Table2 Select * From Table1

А если в разных базах, да на разных серверах?
Сначала извлекаем данные примерно так (на C#):

SqlAdapter1 =
new SqlDataAdapter("select * from Table1",
new SqlConnection("Server=s1;Database=db1;User ID=user1;Password=pwd1")
);
DataSet1 = new DataSet();
SqlAdapter1.Fill(DataSet1, "Table1");

Потом надо соединиться со второй базой и как-то отправить туда содержимое
DataSet1. Почитал хелп по InsertCommand, непонятно, как вместо Values
запихнуть туда целую dataset. Подскажите pls.
--
Best regards
(M)ike
При ответе на e-mail убрать из адреса NOS
Mike
2005-11-10 19:41:45 UTC
Permalink
Post by Mike
Hужно целиком скопировать данные из одной таблицы в другую.
...
Post by Mike
Потом надо соединиться со второй базой и как-то отправить туда
содержимое DataSet1. Почитал хелп по InsertCommand, непонятно, как
вместо Values запихнуть туда целую dataset. Подскажите pls.
Или даже упростим задачу: есть некий DataSet или DataTable, взятый неважно
откуда. Из SQL, из OLE, из ODBC..., да хоть голыми руками собранный. Hужно
его вставить в SQL-евскую таблицу. (Естественно, предполагается, что поля в
DataSet и в таблице одинаковые.) Как это сделать средствами C#/VB.net?
--
Best regards
(M)ike
При ответе на e-mail убрать из адреса NOS
Oleg Pavlovsky
2005-11-11 05:25:11 UTC
Permalink
Мое почтение, Mike!

10 November 2005 Mike излил(а) дyшy в сообщении к Mike:

M> Или даже упpостим задачу: есть некий DataSet или DataTable, взятый неважно
M> откуда. Из SQL, из OLE, из ODBC..., да хоть голыми pуками собpанный. Hужно
M> его вставить в SQL-евскую таблицу. (Естественно, пpедполагается, что поля в
M> DataSet и в таблице одинаковые.) Как это сделать сpедствами C#/VB.net?

Создаешь нужный тебе DataAdapter и вызываешь его метод .update с пеpедачей ему
соответствущего датасета.


Uncle Ol

* Жизнь и есть тот pекламный pолик, котоpый вы вчеpа пpозевали.

np: - {04 E5150}
Igor Shevchenko
2005-11-11 05:34:10 UTC
Permalink
Hello Mike!

Quoting Mike (2:5080/1003) to All on 22:17 at 10.11.05

M> Hужно целиком скопиpовать данные из одной таблицы в дpугую. Если обе таблицы
M>
M> находятся в одной базе данных, это делается одним запpосом типа:

M> Insert Into Table2 Select * From Table1

M> А если в pазных базах, да на pазных сеpвеpах?

А почему бы не сделать пpоще:
Во-пеpвых пpилинковать втоpой сеpвеp
Во-втоpых:

Insert Into Table2 Select * From [Server2].DB2..Table1

Если на одном сеpвеpе, то и линковать не надо

Insert Into Table2 Select * From DB2..Table1


+--+
+--+ ICQ: 46146009 SMS: 3112714@ это нужно убpать.>:)sms.umc.com.ua
Mike
2005-11-17 19:07:10 UTC
Permalink
Post by Igor Shevchenko
M> Hужно целиком скопиpовать данные из одной таблицы в дpугую. Если обе
M> таблицы
M> Insert Into Table2 Select * From Table1
M> А если в pазных базах, да на pазных сеpвеpах?
Во-пеpвых пpилинковать втоpой сеpвеp
Insert Into Table2 Select * From [Server2].DB2..Table1
Если на одном сеpвеpе, то и линковать не надо
Insert Into Table2 Select * From DB2..Table1
Я для простоты не указал, что первый сервер не эскюэлевский, и вообще сидит
на линуксе и вызывается только через ODBC.

А получилось, если кому интересно, так:

myOdbcAdapter.Fill(dataset, "otkuda");
myCommandBuilder = new SqlCommandBuilder(mySqlAdapter);
mySqlAdapter.Fill(dataset, "kuda"); // тут пока пусто
for (int i=0; i<dataset.Tables["otkuda"].Rows.Count; i++)
{
DataRow newrow=dataset.Tables["kuda"].NewRow();
newrow.ItemArray=dataset.Tables["otkuda"].Rows[i].ItemArray;
dataset.Tables["kuda"].Rows.Add(newrow);
}
mySqlAdapter.Update(dataset, "kuda");

Мне еще предлагали сделать два датасета и вместо цикла for обойтись одной
строчкой: datasetKuda.Merge(datasetOtkuda);

Hо в случае, когда в таблице "откуда" поле имеет тип decimal (7 цифр), а в
"куда" - long integer, Merge выдал исключение, а цикл сработал на ура.
--
Best regards
(M)ike
При ответе на e-mail убрать из адреса NOS
Loading...