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

Откуда: Ukrainia
Сообщений: 615
Вообще, мне нужно удалить все таблицы из базы данных.
Я хочу для этого выбрать из сисобджектс все имена таблиц в переменную типа таблица и потом пробежать её и удалить все таблицы. Как это сделать.

Я понимаю, что можно все таблицы из базы удалить и более простым путем, хотелось бы его тоже увидеть, но в качестве примера хочется посмотреть и на вариант, который я описал.
11 мар 03, 16:36    [144318]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
declare @s varchar(8000)

set @s=''
select @s=@s+' drop table '+name from sysobjects where type='U'
exec(@s)

у себя не проверял :)
11 мар 03, 16:51    [144340]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
неважно кто
Guest
sp_msforeachtable 'drop table ?'
11 мар 03, 16:58    [144354]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
В результате выходит такая строка:
drop table Managements drop table Services drop table Subdivisions ...

Но она ничего не удаляет.
Cannot drop the table 'Managements', because it does not exist in the system catalog. :(
11 мар 03, 17:05    [144366]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
use master
IF (SELECT name FROM sysdatabases WHERE sysdatabases.name = 'tablename') = 'tablename'
begin
sp_msforeachtable 'drop table ?'
end
ELSE
begin
create DATABASE SafetyAuditors


Incorrect syntax near 'sp_msforeachtable'.


А почему в BOL нет доков на sp_msforeachtable?
11 мар 03, 17:12    [144380]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
А вот меня такой вопрос интересует, а как ты будешь все таблицы удалять. Я имею ввиду в какой последовательности. Связи то не дадут. Я имею ввиду FOREIGN KEY constraint.
11 мар 03, 17:13    [144382]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
>Но она ничего не удаляет.
>Cannot drop the table 'Managements', because it does not exist in the system catalog. :(

Ну дык имя владельца надо еще дописать. Типа dbo.Managements.
11 мар 03, 17:16    [144393]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
Дык, я не использую внешние ключи.
Мне бы конечно хотелось сделать так, чтобы при удалении из словаря удалялись и из дополнительных, я это делаю с помощью триггеров, а хотелось бы просто ON CASCADE DELETE или что-то в этом роде. А foreign key просто не даёт удалять.
11 мар 03, 17:19    [144402]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Julius
Member

Откуда: Таганрог
Сообщений: 439
DECLARE @SQL varchar(8000)

DECLARE @name varchar(128)
DECLARE @t TABLE(name varchar(128) PRIMARY KEY)
INSERT INTO @t (name) SELECT name FROM sysobjects WHERE xtype = 'U'
DECLARE cur CURSOR FOR SELECT name FROM @t
OPEN cur
FETCH NEXT FROM cur INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'DROP TABLE ' + QUOTENAME(@name, '[')
EXEC(@SQL)
FETCH NEXT FROM cur INTO @name

END
11 мар 03, 17:24    [144411]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
Так заработало!
declare @s varchar(8000)
set @s=''
select @s=@s+' drop table SafetyAuditors.dbo.'+name from SafetyAuditors.dbo.sysobjects where type='U'
exec(@s)
11 мар 03, 17:27    [144417]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
Incorrect syntax near the keyword 'TABLE'.
DECLARE @t TABLE(name varchar(128) PRIMARY KEY)
11 мар 03, 17:45    [144451]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Julius
Member

Откуда: Таганрог
Сообщений: 439
А сервер часом не семерка? Дык там ведь и нету табличных переменных.
11 мар 03, 17:50    [144460]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Julius
Member

Откуда: Таганрог
Сообщений: 439
А сервер часом не семерка? Дык там ведь и нету табличных переменных.
Кроме того, скрипт приведен для примера, как можно использовать табличную переменную в этих целях, хотя нужды в этом, очевидно нет.
11 мар 03, 17:52    [144462]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
Точно, только, что вспомнил про то, что в книге про это читал!
Вот ёлки-палки. У меня-то клиентская часть 2000, а обращаюсь к 7.0! Ну да ладно:)

Спасибо всем!!!
11 мар 03, 17:54    [144465]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
И все-таки интересно, что это такое и откуда оно взялось, что про него в БОЛе ни слова.
sp_msforeachtable
11 мар 03, 17:56    [144468]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
akuz
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 6749
И все-таки интересно, что это такое и откуда оно взялось, что про него в БОЛе ни слова.
sp_msforeachtable


Читайте FAQ, хотя нет, скорее статьи, "недокументированный SQL" автор, по моему, Glory или jimmers (заранее прошу прощения перед обоими).

2 Yola

Вы извращенец. :)
Честно говоря вы не сказали зачем это нужно и в этом кроется проблема. НО!
Делаете скрипт БД со всеми объектами кроме таблиц, с указанием создания базы, поправляете этот скрипт в части DROP DATABASE и никаких проблем, разве что ругательства на то, что таблиц не существует.
11 мар 03, 18:39    [144521]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
Дык, у меня там диаграмма одна, которую не хочется убивать, поэтому при пересоздании бд я просто удаляю все таблицы и потом создаю их заново.
12 мар 03, 09:42    [144786]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
megazoid007
Member

Откуда:
Сообщений: 225
Где то вроде натыкался в инете в примерах как можно создать переменную типа таблица по типу уже существующей, скажете мне показалось или так на самом деле можно сделать ?
2 авг 13, 16:55    [14655673]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
megazoid007, насколько мне известно, это применимо только для временных таблиц, которые могут создаваться конструкцией SELECT ... INTO #<временная таблица> FROM ...
2 авг 13, 17:01    [14655719]     Ответить | Цитировать Сообщить модератору
 Re: Создание переменной типа таблица и дальнейшее её ипользование!  [new]
megazoid007
Member

Откуда:
Сообщений: 225
Minamoto, вот оно што спасибо
4 авг 13, 00:49    [14659399]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить