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

Откуда:
Сообщений: 15
Доброго времени суток, комрады. подскажите плз как мне очистить определенные таблицы в базе. с tsql на вы.
как выбрать нужные таблицы - накропал запрос.

select table_name from [имя базы].INFORMATION_SCHEMA.TABLES Where TABLE_NAME like '[условие_текст]%'

знаю что есть transcate table

вопрос - как с помощью обозначенного выше метода очистить те таблицы, которые попали в выборку запроса?
27 ноя 13, 19:23    [15201323]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
miksoft
Member

Откуда:
Сообщений: 38495
СУБД у вас какая?
27 ноя 13, 19:26    [15201341]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
KirPlastelinin
Member

Откуда:
Сообщений: 15
miksoft,

sql 2008

Модератор: Тема перенесена из форума "MySQL".


Сообщение было отредактировано: 27 ноя 13, 19:29
27 ноя 13, 19:27    [15201345]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
o-o
Guest
KirPlastelinin,

DECLARE CURSOR (Transact-SQL)

делаете курсор по нужным таблицам, в нем TRUNCATE TABLE
27 ноя 13, 19:44    [15201442]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Выполняем в SSMS запрос:

select N'TRUNCATE TABLE ' + table_name from [имя базы].INFORMATION_SCHEMA.TABLES Where TABLE_NAME like '[условие_текст]%'


с выводом результата в текст. Копипастим результат (без заголовков) в панель запроса. Думаем 10 раз. Выполняем.
27 ноя 13, 19:49    [15201473]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
o-o
Guest
тогда уж еще лучше сперва бэкап сделать.
вдруг 10 раз -- мало, и передумает ЗАВТРА?
27 ноя 13, 19:54    [15201517]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
o-o
тогда уж еще лучше сперва бэкап сделать.


Согласен!
27 ноя 13, 19:55    [15201527]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
KirPlastelinin
Member

Откуда:
Сообщений: 15
спасибо за подсказки. завтра попробую на работе. а база тестовая, так что ей не страшно) и не привыкать
27 ноя 13, 20:49    [15201838]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
KirPlastelinin
Member

Откуда:
Сообщений: 15
еще один глупый вопрос, если позволите.

очистка с явным указанием таблицы:
Truncate table [имя базы].[dbo].[_AccumRg4578]

а с выборкой тогда как? просто пробовал с переменной и нифига не получилось. объявлял переменную и в нее пихал значение из запроса (выбирал одно значение), потом Truncate table [имя базы].[dbo].[@TableName] соответственно ругался скуль на меня благим матом. нет такого. может с типом что то напутал, может синтаксис не так указывал, хотя по разному пробовал. самой переменно значение присваивалось. стыд и срам конечно мне, но по сути первый день ковыряю все это добро. прощу отнестись с пониманием :)
27 ноя 13, 21:32    [15201998]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
KirPlastelinin
а с выборкой тогда как?


Не совсем понял вопрос. Вы запрос выполнили? Вы поняли, что его результат - это просто набор инструкций, который можно скопипасить в SSMS и выполнить. Вам нужно готовое решение, которое по произвольному запросу производит очистку таблиц и не в "ручном режиме"?
27 ноя 13, 21:38    [15202019]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
KirPlastelinin
Member

Откуда:
Сообщений: 15
так. попробую объяснить как я это понимаю/вижу и наверняка это мало имеет общего с действительностью. и еще возможна путаница в терминологии. как это не печально, но я 1сник со всеми вытекающими. не оправдание, но все же. итак.
как я это предполагал. получаю выборку имен таблиц, которые хочу очистить. условие накладывается по имени таблицы. к примеру "_AccumRg%", где % - уже может быть произвольным набором символов. затем полученная выборка обходится и в теле цикла выполняется очистка по переданному имени таблицы. как обходить выборку не знал, теперь на сколько понимаю курсор - это где хранится выборка из запроса и она как раз обходится в цикле. но вот как в этом цикле выполнить очистку - не понимаю пока
27 ноя 13, 21:57    [15202088]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1528
KirPlastelinin
так. попробую объяснить как я это понимаю/вижу и наверняка это мало имеет общего с действительностью. и еще возможна путаница в терминологии. как это не печально, но я 1сник со всеми вытекающими. не оправдание, но все же. итак.
как я это предполагал. получаю выборку имен таблиц, которые хочу очистить. условие накладывается по имени таблицы. к примеру "_AccumRg%", где % - уже может быть произвольным набором символов. затем полученная выборка обходится и в теле цикла выполняется очистка по переданному имени таблицы. как обходить выборку не знал, теперь на сколько понимаю курсор - это где хранится выборка из запроса и она как раз обходится в цикле. но вот как в этом цикле выполнить очистку - не понимаю пока
Ну вроде бы русским языком объяснили - не надо никаких циклов, выборка уже содержит все необходимое для очистки, надо только эту выборку выполнить. Обход циклом - это Ваш способ решения задачи, а Вам дали другой способ, без циклов.
27 ноя 13, 22:15    [15202151]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
KirPlastelinin
так. попробую объяснить как я это понимаю/вижу и наверняка это мало имеет общего с действительностью. и еще возможна путаница в терминологии. как это не печально, но я 1сник со всеми вытекающими.

Ну ты ж не олигофрен. :) Поискать код сам можешь? Написать в поисковике "ms sql server for each table", не сложно совсем. Тут на форуме тоже есть поиск.
27 ноя 13, 23:26    [15202548]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
KirPlastelinin
Member

Откуда:
Сообщений: 15
вот честно говоря уже чувствую себя таким))) как была присказка на мисте что ли - "1сники тупые и жадные") просто с ходу въехать в синтаксис и особенности языка порой бывает не так легко, поэтому прошу простить за тупняки. а касательно 1сников и 1с - ооочень часто попадаются холивары. при том основным аргументом зачастую является то, что на русском языке можно "код" писать. а уж насмотревшись на собеседованиях на должность программистов всяких кадров, понимаешь, что не так все однозначно. в общем всем спасибо за помощь!
28 ноя 13, 10:40    [15203866]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
KirPlastelinin,

Ну смотрите: вам должно пригодится.

Записать в переменную ПОСЛЕДНЮЮ ЗАПИСЬ (строчку) в выборке, т.е. если несколько записей вернётся в результате, то ошибки в скрипте не будет (это важно).

DECLARE @TName NVARCHAR(128);

SELECT	TOP 10
	@TName = tb.name
FROM	sys.tables tb;

SELECT	TOP 10
	tb.name
FROM	sys.tables tb;

SELECT @TName


дальше, проход по таблице с полем (столбцом) сортировки, в котором значения УНИКАЛЬНЫ:
IF	OBJECT_ID(N'tempdb..#t') IS NOT NULL
	DROP TABLE #t;
	
CREATE TABLE #t
(	Id INT NOT NULL);

INSERT INTO	#t
(	Id)
VALUES
(	0)
,(	1)
,(	2)
,(	3)
,(	4)
,(	5)
,(	6);

DECLARE 
	@Id INT
,	@IdMax INT;

SELECT 
	@Id = MIN(id)
,	@IdMax = MAX(Id) 
FROM #t;

WHILE @Id <= @IdMax
BEGIN
	PRINT @Id;
	
	SELECT	@Id = MIN(id)
	FROM	#t
	WHERE	Id > @Id;
END;
28 ноя 13, 11:41    [15204446]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
KirPlastelinin
Member

Откуда:
Сообщений: 15
ZOOKABAKODER
KirPlastelinin,

Ну смотрите: вам должно пригодится.

Записать в переменную ПОСЛЕДНЮЮ ЗАПИСЬ (строчку) в выборке, т.е. если несколько записей вернётся в результате, то ошибки в скрипте не будет (это важно).

DECLARE @TName NVARCHAR(128);

SELECT	TOP 10
	@TName = tb.name
FROM	sys.tables tb;

SELECT	TOP 10
	tb.name
FROM	sys.tables tb;

SELECT @TName


дальше, проход по таблице с полем (столбцом) сортировки, в котором значения УНИКАЛЬНЫ:
IF	OBJECT_ID(N'tempdb..#t') IS NOT NULL
	DROP TABLE #t;
	
CREATE TABLE #t
(	Id INT NOT NULL);

INSERT INTO	#t
(	Id)
VALUES
(	0)
,(	1)
,(	2)
,(	3)
,(	4)
,(	5)
,(	6);

DECLARE 
	@Id INT
,	@IdMax INT;

SELECT 
	@Id = MIN(id)
,	@IdMax = MAX(Id) 
FROM #t;

WHILE @Id <= @IdMax
BEGIN
	PRINT @Id;
	
	SELECT	@Id = MIN(id)
	FROM	#t
	WHERE	Id > @Id;
END;


благодарю, но уже сделал по другому. да и кажется мне, что дропать таблицу совсем уж жестоко. транкейтом прошелся по нужным
28 ноя 13, 14:57    [15206347]     Ответить | Цитировать Сообщить модератору
 Re: очистка N-го количества таблиц в базе sql  [new]
o-o
Guest
KirPlastelinin
да и кажется мне, что дропать таблицу совсем уж жестоко


да не предлагал вам ZOOKABAKODER ничего дропать,
он привел свой пример, создав предварительно таблицу #t.
и чтобы иметь возможность этот код неоднократно запускать,
да и вообще на всякий случай, вдруг уже создана таблица с тем же именем,
он перед созданием делает проверку: если уже есть такая таблица, удаляем

ZOOKABAKODER

[/src]
IF OBJECT_ID(N'tempdb..#t') IS NOT NULL
DROP TABLE #t;

CREATE TABLE #t
( Id INT NOT NULL);

[/src]
28 ноя 13, 15:58    [15206847]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить