Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
Подскажите пожалуйста, есть 3 таблицы. Как с помощью курсора из таблицы sysobjects удалить каскадно записи. Н. у Сидорова 3 недвижимости. Если из T_B удалить Сидорова то должно удалиться все 3 записи из Т_А.
Заранее спасибо.

create table T_A(id bigint, housetypes smallint, ownerid int)
create table T_B(id int, FIO varchar (50))
create table T_C(id smallint, housname varchar(10))

insert into T_C select 1,'Полдома' union select 2,'Дом'
insert into T_B select 1, 'Иванов С.С' union select 2,'Сидоров М' union select 3,'Масляков Н'
insert into T_A select 102,2,3 union select 103,2,2 union select 104,1,1 union select 105,1,1 union select 106,2,1

select id,(select housname from C where id=housetypes),(select FIO from B where id=ownerid) from A
drop table T_C
drop table T_B
drop table T_A
29 сен 09, 11:20    [7718812]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Первым запросом удаляем недвижимость Сидорова,
вторым - самого Сидорова

Скорее всего, заворачивая все это дело в транзакцию

Причем тут курсор и причем тут sysobjects, я понять не смог
29 сен 09, 11:26    [7718879]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
Понятно конечно с начало недвижимостей потом Сидорова. Но есть select name from sysobjects where xtype like 'U' and name like 'T_%'
можно мне кажется было реализавать скрипт курсором чтобы по sysobjects удалять автоматически. Просто если так получится сэкономили бы время.
29 сен 09, 11:29    [7718905]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Mari-Salt
Понятно конечно с начало недвижимостей потом Сидорова. Но есть select name from sysobjects where xtype like 'U' and name like 'T_%'
можно мне кажется было реализавать скрипт курсором чтобы по sysobjects удалять автоматически. Просто если так получится сэкономили бы время.


какое, нафиг время ? "Я фигею, с вас"(С)
29 сен 09, 11:33    [7718946]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Mari-Salt
Просто если так получится сэкономили бы время.
Какое время?
Время на написание запросов?
Вот, я Вам его экономлю:
...
delete from T_A where ownerid = 2
delete from T_B where id = 2
...
29 сен 09, 11:34    [7718961]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
declare @nameTAB sysname
Где то примерно так, но это у меня не работает ..

declare @ch char
set @ch=char(39)

declare crs CURSOR for
select name from sysobjects where xtype like 'U' and name like 'T_%'

open crs
fetch next from crs into @nameTAB

set @nameTAB=crs
while @@fetch_status=0
begin

set @stmt='delete table '+ @ch+@nameTAB+@ch

execute(@stmt)
fetch next from crs into @nameDB
end
close crs
deallocate crs
29 сен 09, 11:34    [7718962]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Mari-Salt
Где то примерно так, но это у меня не работает ..
Перед тем, как изобретать велосипеды, надо, простите, с азов начать
Например, ознакомиться с документацией про DELETE
29 сен 09, 11:38    [7719004]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
ну, уберу ..from.., может кто нибудь сталкивался с такой ситуацией. Согласитесь через курсором действительно экономите время
29 сен 09, 11:42    [7719035]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
На вопросы, какое именно время Вы хотите экономить, Вы отвечать не желаете
Последовать по данной мною ссылке Вы не желаете
В результате я больше просто не знаю, чем Вам помочь
29 сен 09, 11:45    [7719064]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
Паганель, как жаль (.... Ну помогите же )
но через курсор классно было бы согласны?
29 сен 09, 11:47    [7719080]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
Паганель, просто там опечатки, не обращайте внимание, знаю это . Просто этим методом удалять классно было бы
29 сен 09, 11:49    [7719095]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
gR4mm
Member

Откуда: Москва
Сообщений: 1412
Mari-Salt
Согласитесь через курсором действительно экономите время

Нет, как раз наоборот. Динамика выполняется обычно дольше.

А как Вы определяете порядок удаления из таблиц по sysobjects?
И что будет если ли на 1(или 2ом) delete возникнет ошибка?
29 сен 09, 11:49    [7719096]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Mari-Salt,

общество вопрошает, зачем Вам огород с курсорами, вместо 3-х строчек DELETE?
29 сен 09, 11:50    [7719105]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
если думаю select name from sysobjects where xtype like 'U' and name like 'T_%' order by name
поставить то мне кажется не будет ошибок в данном случае
29 сен 09, 11:51    [7719114]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Mari-Salt,

Вам вообще можно обойтись одним Delete'ом, если на недвижимость Сидорова навесить Foreign key с каскадным удалением...
29 сен 09, 11:56    [7719140]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
PaulYoung, ну классный это метод, всех это интересует думаю, потому что SQL SERVER представляет такую возможность, почему бы нам его не использовать.
Представтье, если в БД много таблиц. то каждой таблице писать скрипт чтоSQLли.. так не интересно...
29 сен 09, 11:56    [7719141]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
Mari-Salt
PaulYoung, ну классный это метод, всех это интересует думаю, потому что SQL SERVER представляет такую возможность, почему бы нам его не использовать.
Представтье, если в БД много таблиц. то каждой таблице писать скрипт чтоSQLли.. так не интересно...
Классных методов масса, а делать нужно правильно.
29 сен 09, 11:57    [7719152]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
gR4mm
Member

Откуда: Москва
Сообщений: 1412
Mari-Salt
если думаю select name from sysobjects where xtype like 'U' and name like 'T_%' order by name
поставить то мне кажется не будет ошибок в данном случае


автор
drop table T_C
drop table T_B
drop table T_A


Тогда уж
автор
ike 'T_%' order by name desc


автор
Представтье, если в БД много таблиц. то каждой таблице писать скрипт чтоSQLли.. так не интересно...

Волшебной кнопки еще не изобрели. :)
29 сен 09, 11:58    [7719162]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Mari-Salt
Member

Откуда:
Сообщений: 367
Неужели вот этот вариант через курсор никого не интересует (
29 сен 09, 11:59    [7719172]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
gR4mm
Member

Откуда: Москва
Сообщений: 1412
Mari-Salt
Неужели вот этот вариант через курсор никого не интересует (

"Вам шашечки или ехать?" (с)
29 сен 09, 12:03    [7719209]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
да уж...
Guest
да уж...
29 сен 09, 13:35    [7719967]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Mari-Salt
Неужели вот этот вариант через курсор никого не интересует (


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

Как тут уже заметили, может быть и дольше.

Если делать курсором надо заморачиваться на след темы:
- кто на кого ссылается, тут надо подключать другие системные таблицы, чтобы выстроить нужный порядок
- поле, по которому делается ограничение WHERE при удалении либо во всех таблах должно одинаково называться, либо делать таблицы соответствия: таблица - поле
- все таблицы, начинающиеся с буквы Т должны содержать данные о Сидорове, либо опять таблица соответствия, вместо sysobjects

В итоге, времени на разработку тратится больше.
Само удаление уж тожно не быстрее - это 100%
Геморрой в поддержке.
29 сен 09, 13:55    [7720128]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Борис Бритва
Member

Откуда: Киев
Сообщений: 127
Если не подходит Foreign Key с каскадным удалением - повесьте триггер before delete на таблицу.
29 сен 09, 15:15    [7720690]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Борис Бритва
Если не подходит Foreign Key с каскадным удалением - повесьте триггер before delete на таблицу.
before delete не бывает!
29 сен 09, 20:21    [7722238]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
iap
Борис Бритва
Если не подходит Foreign Key с каскадным удалением - повесьте триггер before delete на таблицу.
before delete не бывает!

Зря, кстати.
29 сен 09, 20:27    [7722260]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить