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

Откуда: Болонья, Италия
Сообщений: 1108
У меня есть хостинг ASP+SQL2005, панель управления базой через интернет работает ОЧЕНь медленно.
Нужно очистить базу.

таблицы удалил следующим образом:
1. получил все названия таблиц через
SqlCommand cmd = new SqlCommand("select *  from  [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_TYPE] = 'BASE TABLE'", conn);
2. в цикле програмно удалил каждую таблицу (
drop  from  [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_TYPE] = 'BASE TABLE'
- запрещённая команда)

Подскажите, как получить список хранимых процедур?
6 июл 09, 13:05    [7380332]     Ответить | Цитировать Сообщить модератору
 Re: Как написать скрипт, который удалит все Stored Procedures?  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
select * from INFORMATION_SCHEMA.ROUTINES
6 июл 09, 13:06    [7380345]     Ответить | Цитировать Сообщить модератору
 Re: Как написать скрипт, который удалит все Stored Procedures?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
DECLARE @DropTables NVARCHAR(MAX);
SELECT @DropTables=ISNULL(@DropTables,'')+CASE WHEN @DropTables IS NULL THEN N'DROP TABLE ' ELSE N',' END+QUOTENAME(TABLE_SCHEMA)+N'.'+QUOTENAME(TABLE_NAME)
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=N'BASE TABLE';
EXECUTE(@DropTables);

DECLARE @DropViews NVARCHAR(MAX);
SELECT @DropViews=ISNULL(@DropViews,'')+CASE WHEN @DropViews IS NULL THEN N'DROP VIEW ' ELSE N',' END+QUOTENAME(TABLE_SCHEMA)+N'.'+QUOTENAME(TABLE_NAME)
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=N'VIEW';
EXECUTE(@DropViews);

DECLARE @DropProcedures NVARCHAR(MAX);
SELECT @DropProcedures=ISNULL(@DropProcedures,'')+CASE WHEN @DropProcedures IS NULL THEN N'DROP PROCEDURE ' ELSE N',' END+QUOTENAME(ROUTINE_SCHEMA)+N'.'+QUOTENAME(ROUTINE_NAME)
FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE=N'PROCEDURE';
EXECUTE(@DropProcedures);

DECLARE @DropFunctions NVARCHAR(MAX);
SELECT @DropFunctions=ISNULL(@DropFunctions,'')+CASE WHEN @DropFunctions IS NULL THEN N'DROP FUNCTION ' ELSE N',' END+QUOTENAME(ROUTINE_SCHEMA)+N'.'+QUOTENAME(ROUTINE_NAME)
FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE=N'FUNCTION';
EXECUTE(@DropFunctions);
6 июл 09, 13:34    [7380580]     Ответить | Цитировать Сообщить модератору
 Re: Как написать скрипт, который удалит все Stored Procedures?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Strassebahn,

только осторожнее с моим скриптом!
А то ведь действительно удалите все таблицы, представления, процедуры и функции!

Кстати, удалять объекты в произвольном порядке не всегда возможно.
Надо как-то анализировать зависимости, наличие FK и т.п.
Так что всё это очень приблизительно.
6 июл 09, 13:39    [7380623]     Ответить | Цитировать Сообщить модератору
 Re: Как написать скрипт, который удалит все Stored Procedures?  [new]
Strassebahn
Member

Откуда: Болонья, Италия
Сообщений: 1108
спасибо за советы, все сработало

да, чтобы удалить таблицы, пришлось запускать процедуру пару раз - возникало исключение из-за FK
6 июл 09, 14:30    [7381033]     Ответить | Цитировать Сообщить модератору
 Re: Как написать скрипт, который удалит все Stored Procedures?  [new]
RizONE
Member

Откуда: Махачкала
Сообщений: 284
iap
DECLARE @DropTables NVARCHAR(MAX);
SELECT @DropTables=ISNULL(@DropTables,'')+CASE WHEN @DropTables IS NULL THEN N'DROP TABLE ' ELSE N',' END+QUOTENAME(TABLE_SCHEMA)+N'.'+QUOTENAME(TABLE_NAME)
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=N'BASE TABLE';

скопировал, вставил, запустил - нихрена ничего не удалила. Что не так?
Нужно просто удалить все таблицы или хотя бы очистить содержимое таблиц дабы уменьшить занимаемое базой место, саму базу убивать не надо.
3 ноя 09, 18:50    [7878847]     Ответить | Цитировать Сообщить модератору
 Re: Как написать скрипт, который удалит все Stored Procedures?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
RizONE
iap
DECLARE @DropTables NVARCHAR(MAX);
SELECT @DropTables=ISNULL(@DropTables,'')+CASE WHEN @DropTables IS NULL THEN N'DROP TABLE ' ELSE N',' END+QUOTENAME(TABLE_SCHEMA)+N'.'+QUOTENAME(TABLE_NAME)
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=N'BASE TABLE';

скопировал, вставил, запустил - нихрена ничего не удалила. Что не так?
Нужно просто удалить все таблицы или хотя бы очистить содержимое таблиц дабы уменьшить занимаемое базой место, саму базу убивать не надо.
Нехорошо приписывать мне то, что я не писал.
А где же
EXEC(@DropTables)
?
или хотя бы
PRINT @DropTables
чтобы посмотреть, что выполнится при EXEC().
Таблицы, возможно, удалять будет сложнее, потому что имеется такая штука, как Referential Integrity в виде FOREIGN KEY CONSTRAINTs
3 ноя 09, 18:59    [7878886]     Ответить | Цитировать Сообщить модератору
 Re: Как написать скрипт, который удалит все Stored Procedures?  [new]
RizONE
Member

Откуда: Махачкала
Сообщений: 284
виноват :) не до конца сюда скопировал но в сиквел копировал все :)
Чесно гря я не понял что за буква N там везде (...THEN N'D...) ну, вобщем и с N запускал и без нее...
и чтоб посмотреть что он туда выбирает написал
select @DropTables
так он мне всю дорогу выдавал Null
одним словом таблицы в конце концов удалились...хз как это вышло даже
3 ноя 09, 19:16    [7878944]     Ответить | Цитировать Сообщить модератору
 Re: Как написать скрипт, который удалит все Stored Procedures?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
RizONE
Чесно гря я не понял что за буква N там везде (...THEN N'D...)
Что означает N перед строковой константой ?
3 ноя 09, 19:19    [7878950]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить