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

Откуда:
Сообщений: 2
Есть задача:
Удалить из БД все записи в таблицах дата которых меньше 2008 года.
У половины таблиц есть столбец CreateDate - datetime, половина справочники.
Решение:
1. Выбрать все имена таблиц из БД у которых есть стобец CreateDate
2. Пройтись по этим таблицам и удалить необходимые записи.

Пункт 1 сделал, а 2ой не получается) Помогите, пожалуйста, со 2ым пунктом.
30 сен 09, 21:39    [7727330]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать данные из известных имен таблиц  [new]
Tako
Member

Откуда:
Сообщений: 65
Курсором?
30 сен 09, 21:42    [7727335]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать данные из известных имен таблиц  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
sp_MSforeachtable
30 сен 09, 21:48    [7727354]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать данные из известных имен таблиц  [new]
Владимир Феникс
Member

Откуда:
Сообщений: 2
Tako,
Вот у меня сейчас такой код:

use ххх

Declare @name nvarchar(50)

declare NAMES CURSOR
FOR SELECT name
FROM
[sys].[tables]

OPEN NAMES

fetch next from NAMES
into @name

while @@fetch_status = 0
begin

-- удаление

fetch next from NAMES
into @name
end

не могу сообразить как в --удалении использовать курсор
30 сен 09, 21:48    [7727355]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать данные из известных имен таблиц  [new]
Tako
Member

Откуда:
Сообщений: 65
Курсор нужен, чтобы пройти по нужным табличкам.
В удалении вам нужна динамика. Формируете запрос на удаление, где на место таблицы подставляете полученный вами @name
и exec его
Как то так
EXEC ('delete from ' + @tablename + ' where условие')
30 сен 09, 22:16    [7727435]     Ответить | Цитировать Сообщить модератору
 Re: Как выбрать данные из известных имен таблиц  [new]
Tako
Member

Откуда:
Сообщений: 65
iap, а как sp_MSforeachtable поведет в себя в случае, если нет столбца CreateDate, по которому нужно фильтровать записи?
Автору ведь нужны не все таблицы, а только с этим столбцом.

Кстати, здесь
FOR SELECT name
FROM
[sys].[tables]
нужно добавить join на sys.columns и условие по имени столбца наверно, зачем все таблички то гонять.
30 сен 09, 22:22    [7727458]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить