среда, 25 февраля 2009 г.

MSSQL - удаление большого кол-ва записей

исследование темы - удаление большого кол-ва записей из БД.
результат: скрипт для пошагового удаления.
причем удалять придется не при запросе, а в автоматическом режиме. т.е. например раз в 10 часов...

* памятка:
нельзя удалять большое кол-во записей сразу, т.к.:
1. распухнет лог транзакций
2. может не хватить свободного места из-за п.1
3. доолгооо будет удалятся


WHILE 1 = 1
BEGIN
DELETE TOP (10000) --нужно использовать top т.к. rowcount в новых версиях не будет работать для delete
FROM Table1 --таблица, откуда удалять
WHERE ToBeDeleted = 't' --флаг "для удаления"

WAITFOR DELAY '000:00:05' -- 5 задержка

IF @@ROWCOUNT = 0
BREAK
END

понедельник, 9 февраля 2009 г.

NET 3.5. Linq. Пример получения списка категорий из xml-файла системы voicecards.ru


XDocument xml = XDocument.Load(Page.MapPath("~/voicecards/xml/data.xml"));


try
{
var cards = (from x in xml.Descendants("voicecards").Elements("cards").Elements("card")
join c in xml.Descendants("voicecards").Elements("categories").Elements("category") on x.Element("catid").Value equals c.Element("catid").Value
select new
{
CardID = x.Element("cardid").Value,
CatID = int.Parse(c.Element("catid").Value),
CatName = c.Element("nameshort").Value,
CatParentID = c.Element("parentid").Value,
CatNameFull = c.Element("namefull").Value,
}
into s
group s by new { s.CatID, s.CatName, s.CatNameFull, s.CatParentID } into g
select new
{
Count=g.Count(),
g.Key.CatID,
g.Key.CatName,
g.Key.CatNameFull,
g.Key.CatParentID
}
);


}
catch { }