PDA

Просмотр полной версии : Удаление карт из базы



jon73.ul
02.10.2014, 12:12
Добрый день! Уважаемые есть у кого то пример sql скрипта с помощью которого можно удалить не нужные зарегистрированные в базе карты? Или может это можно сделать через managment studio ? Подскажите как удалить карты из базы. Спасибо!

sibgaba
02.10.2014, 15:56
А зачем?

Удалить карты, если по ним были кассовые операции и игры - это геморройная задачка.
Слишком много связанных таблиц нужно будет обработать и не накосячить.

jon73.ul
02.10.2014, 20:48
А зачем?

Удалить карты, если по ним были кассовые операции и игры - это геморройная задачка.
Слишком много связанных таблиц нужно будет обработать и не накосячить.


Нет, удалить те которые еще не заюзаны

sibgaba
03.10.2014, 16:03
Тем более не понимаю - Зачем???

В зависимости от версии GK с которой вы работаете это будут разные таблицы. Какая версия?

Если у вас сохранились скрипты, при помощи которых карты добавлялись в БД, то в них вы можете увидеть в какую таблицу шло добавление, и соответственно просто удалить добавленные записи из этих таблиц.

Если версия старая (до 3,16 по моему), то это были 2 таблицы в 2-х базах. Если от 3.16 до 3.2Х, то там одна таблица. В самых старших версиях (там где карты добавляются в БД через Редактор) - не смотрел.

Евгений68
22.01.2015, 16:28
С версии 3.23 если я не ошибаюсь, карты удаляются вот этим запросом:

Сначала


Delete gk.GK_CARDS_EXT
where card = ....




Потом


Delete gk.GK_CARDS
where card = ....

Если хотите удалить какой то диапазон карт, то запрос такой:

Сначала

Delete gk.GK_CARDS_EXT
where card >= 1089000
and card <= 1090000

Потом

Delete gk.GK_CARDS

where card >= 1089000
and card <= 1090000

NeiroN
30.01.2015, 21:27
Я бы сделал так для версии 3.23
ковыряю базу достаточно давно, знаю что и для чего.

DECLARE @CARD int
DECLARE upd CURSOR READ_ONLY FOR
SELECT [CARD] FROM [gkArcade].[gk].[GK_CARDS]
WHERE [STATE] in(2,3) --Замененные(3) и удаленные(2) карты
-- WHERE [STATE] = 1 -- Активные карты
-- WHERE [STATE] = 0 -- Неактивные карты(для продажи)
-- WHERE [CARD] >= 3670 AND [CARD] <= 3744 -- Карты по номерам
OPEN upd
FETCH NEXT FROM upd INTO @CARD
WHILE (@@FETCH_STATUS <> -1) BEGIN
--PRINT "Удаляем "+@CARD
DELETE [gkArcade].[gk].[GK_CARDS] WHERE [CARD]=@CARD -- таблица карт
DELETE [gkArcade].[gk].[GK_CARDS_EX] WHERE [CARD]=@CARD -- персональная информация
DELETE [gkArcade].[gk].[GK_CARDS_EXT] WHERE [CARD]=@CARD -- хэши кодов карт
DELETE [gkArcade].[gk].[GK_CARDS_PHOTO] WHERE [CARD]=@CARD -- фото владельцев
DELETE [gkArcade].[gk].[GK_CARDS_CO] WHERE [CARD]=@CARD -- для охранного поста
FETCH NEXT FROM upd INTO @CARD
END
CLOSE upd

А вообще карты лучше не удалять - потому что коды стоят денег - лучше обеспечить ротацию замененных и утеряных карт.
Покупаешь 5000 кодов - а в базе есть еще 10000 кодов не проданных(неактивированны ) карт - просто самих карт нет. Так что имея 50000 карт можно вполне обходиться без генерации кодов.