Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на удаление с использованием временной таблицы / 6 сообщений из 6, страница 1 из 1
20.08.2001, 05:30
    #32012151
AlexanderVS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление с использованием временной таблицы
Есть таблица Т1 с полями ID1,ID2,ID3, являющимися FK. В программе формируется временная таблица #T с такими же полями, в которую записываются строки с комбинациями этих ID. Далее надо запустить SP которая бы удалила записи из таблицы Т1. Конструкция типа:
DELETE FRROM T1 WHERE
SELECT T1.ID1=#T.ID1 AND T1.ID2=#T.ID2 AND T1.ID3=#T.ID3
FROM #T
А как тогда, подскажите пожалуйста?!
И еще вопрос, касающийся проектироания БД. Есть таблица Изделий, и есть таблица Операцй. В таблицу Операции по Изделиям записываем ИД изделия и ИД операции. Как правильнее поступить, комбинацию из этих двух ИД сделать первичным ключом этой таблицы или оставить эту таблицу без первичного ключа, а эти ИД оставить просто в качестве FK?
...
Рейтинг: 0 / 0
20.08.2001, 05:34
    #32012152
Peter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление с использованием временной таблицы
DELETE FROM T1
FROM T1
JOIN #T ON T1.ID1=#T.ID1 AND T1.ID2=#T.ID2 AND T1.ID3=#T.ID3
...
Рейтинг: 0 / 0
20.08.2001, 06:59
    #32012175
AnKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление с использованием временной таблицы
Вот интересно, сработал ли запросик? Нет, с синтаксисом все нормально, вот только увидит ли данная сторедпрока временную таблицу, "сформированную в программе"? Грабельки-то старенькие 2 AlexanderVS, как ты решил проблему?
...
Рейтинг: 0 / 0
20.08.2001, 07:23
    #32012183
AnKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление с использованием временной таблицы
По поводу Операций и Изделий.

Итого, имеем:
Т1 - Операции(первичн. ключ - ИДОперации)
Т2 - Изделия(первич. ключ - ИДИзделия)
Т3 - ОперацииПоИзделиям.

Так вот, если комбинация "Операция - Изделие" - уникальна, то безусловно, в Т3 первичный ключ по ИДОперации+ИДИзделия. В противном случае (не уникальность комбинации) - сделай по ним в Т3 просто индексы. И я бы еще в этом случае ввел поле ИДКомбинацииОперацияИзделие. Несколько запутано, но я думаю, понятно.


Теперь вернемся к FK.
Признаться, в SQL7 я связываю таблицы, однако в свойстве Enforce relationship for INSERT and UPDATES снимаю галочку - в результате, FK является просто информативным ( шоб на диаграме видно было). Целостность при удалении обеспечиваю триггерами.

А вот в 2К вроде FK стали поприятнее - сами поддерживают каскадное удаление, поэтому никаких галочек снимать не надо. Я работаю на семерке, о 2К только слышал.
Коллеги, раб. в 2К, я правильно слышал?.
...
Рейтинг: 0 / 0
20.08.2001, 08:13
    #32012192
AlexanderVS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление с использованием временной таблицы
>DELETE FROM T1
>FROM T1
>JOIN #T ON T1.ID1=#T.ID1 AND T1.ID2=#T.ID2 AND T1.ID3=#T.ID3
Иногда решения лежат на поверхности, но мы не видим их
А ведь так просто! Спасибо.

2 AnKa - запросик работает. Вобщем то я так часто делаю, создаю в программе(VB) # таблицу, заполняю ее данными, а в SP использую эту таблицу. (Коннект с базой постоянный, на время работы программмы.)
Ни разу не писал триггера, в т.ч. и для удаления из подчиненных таблиц, все это прописывал в SP отвечающей за удаление данных. Дайте, пожалуйста, пример триггера для удаления.
...
Рейтинг: 0 / 0
20.08.2001, 09:17
    #32012207
AnKa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос на удаление с использованием временной таблицы
Т1- главная таблица (документы):

ID int IDENTITY (1, 1) NOT NULL , - ключевое поле - идентефикатор документа
Field1 char(10) NULL ,
Field2 char(10) NULL - остальные информативные поля


Т2 - подчиненная таблица (детализация документов):

ID int IDENTITY (1, 1) NOT NULL , ключевое поле - идентефикатор строки детализации (в принципе для нашего примера оно ненужно)
LINK_ID int NOT NULL , - собственно поле, связующее с Т1.ID. По нему необходим индекс.
Field1 char (10) NULL ,
Field2 char (10) NULL - остальные информативные поля детализации.

А вот и триггерок на T1:

\nCREATE TRIGGER tr_del_T1 ON T1
FOR DELETE
AS
DELETE T2
FROM deleted d ,T2
WHERE d.ID=T2.LINK_ID
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос на удаление с использованием временной таблицы / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]