Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Перемещение строк от одной таблицы к другой  [new]
ayazahmadov
Member

Откуда:
Сообщений: 15
Структуры таблиц:

Items:

Item_Id int
ItemCode int
ItemInformation nvarchar(50)
ItemManufacturer nvarchar(50)
ItemPriceForPartners float
ItemPriceForRealization float
ItemAccDoc int
ItemPackCont int




BasketItems:

Item_Id int
ItemCode int
ItemInformation nvarchar(50)
ItemManufacturer varchar(50)
ItemDiscount float
ItemSession int
ItemPriceForPartners float
ItemPriceForRealization float
ItemAccDoc int
ItemResidue int
ItemBuyer nvarchar(50)
ItemPartnerNum int
ItemPackCont int

-----------------------------------------------------------

программа написанная на VS 2008 C# дает запрос для перемещения нескльких строк с Items в BasketItems:


SqlDataReader read_for_multiple = (new SqlCommand("SELECT TOP " + ItemQty.Text + " * FROM Items WHERE ItemCode = '" + tBexactlyCode.Text + "'", conn)).ExecuteReader();
while (read_for_multiple.Read())
{
string[] row2 = new string[] {
read_for_multiple["Item_Id"].ToString(),
read_for_multiple["ItemCode"].ToString(),
read_for_multiple["ItemInformation"].ToString(),
read_for_multiple["ItemManufacturer"].ToString(),
tBdiscount.Text,
session.Text,
read_for_multiple["ItemPriceForPartners"].ToString(),
read_for_multiple["ItemPriceForRealization"].ToString(),
read_for_multiple["ItemAccDoc"].ToString(),
read_for_multiple["ItemPackCont"].ToString(),
};
Bufer.Rows.Add(row2);
}
read_for_multiple.Dispose();
read_for_multiple.Close();
try
{
act_price();
for (int u = 0; u < Convert.ToInt16(ItemQty.Text); u++)
{
string itempriceforpartners = Bufer[6, u].Value.ToString();
string itempriceforrealization = Bufer[7, u].Value.ToString();
string qry3 = "INSERT INTO BasketItems (Item_Id,ItemCode,ItemInformation,ItemManufacturer,ItemDiscount,ItemSession,ItemPriceForPartners,ItemPriceForRealization,ItemAccDoc,ItemResidue,ItemPackCont) VALUES('" + Bufer[0, u].Value.ToString() + "','" + Bufer[1, u].Value.ToString() + "',@ItemInformation,'" + Bufer[3, u].Value.ToString() + "','" + Bufer[4, u].Value.ToString() + "','" + Bufer[5, u].Value.ToString() + "','" + itempriceforpartners.Replace(',', '.') + "','" + itempriceforrealization.Replace(',', '.') + "','" + Bufer[8, u].Value.ToString() + "','" + tBresidue.Text + "','" + Bufer[9, u].Value.ToString() + "')";
SqlCommand tobasket = new SqlCommand(qry3, conn);
tobasket.Parameters.Add("@ItemInformation", SqlDbType.NVarChar, 50);
tobasket.Parameters["@ItemInformation"].Value = Bufer[2, u].Value.ToString();
tobasket.ExecuteScalar();
(new SqlCommand("DELETE FROM Items WHERE Item_Id = '" + Bufer[0, u].Value.ToString() + "'", conn)).ExecuteScalar();
string qry1 = "UPDATE Sessions SET CustomerName=@Buyer WHERE Session_id='" + session.Text + "'";
SqlCommand setsession = new SqlCommand(qry1, conn);
setsession.Parameters.Add("@Buyer", SqlDbType.NVarChar, 50);
setsession.Parameters["@Buyer"].Value = Buyer.Text;
setsession.ExecuteScalar();
}
}
catch (Exception exc)
{
MessageBox.Show("SİSTEMDƏ XƏTA BAŞ VERDİ! \n " + exc.ToString() + "");
}




Все вроде получалось до какого-то времени. Потом когда число строк таблицы Items выросла за предели 300.000 программа начала ужавно висеть во время перемещения товаров. Одновременно перемещаются от 100 до 3000 строк. Для того чтобы этого сделать эффективно мне кажется нужно использовать хранимую процедуру, которая ощутимо повысит скорость запроса. Только я не знаю каким образом написать хранимую процедуру, чтоб в коде программы также передать переменную ItemCode. Вообще нет обыт работы с хр. продедурами. Прошу подробной помощи.
23 июл 11, 15:33    [11016843]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение строк от одной таблицы к другой  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 852
ayazahmadov,

Начинать надо, как всегда, с чтения документации - http://msdn.microsoft.com/en-us/library/ms187926.aspx.

И все три твоих SQL-statements вполне можно объединить в одну процедуру, все что тебе нужно будет сделать - только вызвать процедуру.
23 июл 11, 15:46    [11016868]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение строк от одной таблицы к другой  [new]
ayazahmadov
Member

Откуда:
Сообщений: 15
flexgen,

Server Error in '/' Application.
--------------------------------------------------------------------------------

The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

Requested URL: /en-us/library/ms187926.aspx.
23 июл 11, 16:05    [11016901]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение строк от одной таблицы к другой  [new]
ayazahmadov
Member

Откуда:
Сообщений: 15
flexgen,

я знаю что процедура пишется:

CREATE PROC myproc

SELECT * FROM Items WHERE ItemCode = '01122334'

END;

вызывается процедура тоже просто: CALL myproc

а переменную как дать при вызове процедуры так, чтоб 01122334 участвовал в нем и чтоб этот код мог меняться каждым разом?
23 июл 11, 16:10    [11016916]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение строк от одной таблицы к другой  [new]
Shamanus
Member

Откуда: мы пришли, кто мы, куда идем?
Сообщений: 6021
Блог
ayazahmadov
flexgen,

я знаю что процедура пишется:

CREATE PROC myproc

SELECT * FROM Items WHERE ItemCode = '01122334'

END;

вызывается процедура тоже просто: CALL myproc

а переменную как дать при вызове процедуры так, чтоб 01122334 участвовал в нем и чтоб этот код мог меняться каждым разом?
http://msdn.microsoft.com/ru-ru/library/ms187926.aspx
23 июл 11, 16:20    [11016950]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение строк от одной таблицы к другой  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 852
ayazahmadov
flexgen,

Server Error in '/' Application.
--------------------------------------------------------------------------------

The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

Requested URL: /en-us/library/ms187926.aspx.


Убери точку в конце линка - http://msdn.microsoft.com/en-us/library/ms187926.aspx
23 июл 11, 20:43    [11017394]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение строк от одной таблицы к другой  [new]
ayazahmadov
Member

Откуда:
Сообщений: 15
Уважаемые специалисты, мне помогающие.

Огромное Вам спасибо за Вашу бескорысную помощь нам начинающим. Как написать процедуру правильно я вроде научился. Теперь вопрос по запросам.

При помощи оператора "for", как я уже писал Выше, программа повторяет один и тот же запрос N раз. Как я могу этого сделать по отношение, к примеру запроса "INSERT INTO BasketItems (Item_Id,ItemCode,ItemInformation,ItemManufacturer,ItemDiscount,ItemSession,ItemPriceForPartners,ItemPriceForRealization,ItemAccDoc,ItemResidue,ItemPackCont) VALUES('" + Bufer[0, u].Value.ToString() + "','" + Bufer[1, u].Value.ToString() + "',@ItemInformation,'" + Bufer[3, u].Value.ToString() + "','" + Bufer[4, u].Value.ToString() + "','" + Bufer[5, u].Value.ToString() + "','" + itempriceforpartners.Replace(',', '.') + "','" + itempriceforrealization.Replace(',', '.') + "','" + Bufer[8, u].Value.ToString() + "','" + tBresidue.Text + "','" + Bufer[9, u].Value.ToString() + "" в пределах запроса?
24 июл 11, 11:33    [11018811]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение строк от одной таблицы к другой  [new]
ayazahmadov
Member

Откуда:
Сообщений: 15
Разобрался. Спасибо.
24 июл 11, 19:10    [11019893]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить