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

Откуда:
Сообщений: 69
Парни, помогайте:

Есть вот такая вещь

USE Config_backup

DECLARE @TBLNAME nvarchar(776)
 
DECLARE table_cursor CURSOR  FOR 
SELECT name
FROM sysobjects
WHERE     (xtype = 'u')
ORDER BY name

OPEN table_cursor
FETCH NEXT FROM table_cursor 
	INTO @TBLNAME
	
WHILE @@FETCH_STATUS = 0

BEGIN
	FETCH NEXT FROM table_cursor 
	INTO @TBLNAME
	[color=red][b]DROP TABLE @TBLNAME[/b][/color]
END

CLOSE table_cursor
   DEALLOCATE table_cursor


Так вот на этом DROP TABLE @TBLNAME всё встаёт с криком "Неправильный синтаксис около конструкции "@tblname" "


Как тут сделать, чтоб таблицы убивались по названию из курсора?
10 сен 14, 13:39    [16559043]     Ответить | Цитировать Сообщить модератору
 Re: Переменная в DROP TABLE  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
DSQL
10 сен 14, 13:40    [16559045]     Ответить | Цитировать Сообщить модератору
 Re: Переменная в DROP TABLE  [new]
AKArmor
Member

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

если честно, я не понял ответ. Можно подробнее?
10 сен 14, 13:40    [16559052]     Ответить | Цитировать Сообщить модератору
 Re: Переменная в DROP TABLE  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
declare @str nvarchar(2000)
set @str = N'DROP TABLE '
set @str = @str +@TABLENAME
exec (@str)
..
set @str = N'DROP TABLE '
тока схему все равно указывать надо
10 сен 14, 13:43    [16559079]     Ответить | Цитировать Сообщить модератору
 Re: Переменная в DROP TABLE  [new]
AKArmor
Member

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

спасибо, теперь всё понял
10 сен 14, 13:56    [16559174]     Ответить | Цитировать Сообщить модератору
 Re: Переменная в DROP TABLE  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
DROP TABLE @TBLNAME не нужно

внесите DECLARE внутрь цикла и она обнуляться (пересоздаваться) будет сама
10 сен 14, 14:14    [16559307]     Ответить | Цитировать Сообщить модератору
 Re: Переменная в DROP TABLE  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Не нужен никакой курсор.

как скриптом грохнуть все таблицы?
10 сен 14, 14:35    [16559445]     Ответить | Цитировать Сообщить модератору
 Re: Переменная в DROP TABLE  [new]
AKArmor
Member

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

извиняюсь, упустил момент про схему, это что имеется ввиду?
10 сен 14, 15:31    [16559893]     Ответить | Цитировать Сообщить модератору
 Re: Переменная в DROP TABLE  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap
Не нужен никакой курсор.

как скриптом грохнуть все таблицы?

AKArmor
Maxx,

извиняюсь, упустил момент про схему, это что имеется ввиду?

iap уже вам все ответил:)

DECLARE @SQL VARCHAR(MAX);
SELECT @SQL=ISNULL(@SQL,N'')+','+QUOTENAME(TABLE_SCHEMA)+'.'+QUOTENAME(TABLE_NAME)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE=N'BASE TABLE';

SET @SQL=STUFF(@SQL,1,1,N'DROP TABLE ');

PRINT @SQL;
/*EXECUTE(@SQL);*/
10 сен 14, 15:57    [16560082]     Ответить | Цитировать Сообщить модератору
 Re: Переменная в DROP TABLE  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Maxx
iap
Не нужен никакой курсор.

как скриптом грохнуть все таблицы?

AKArmor
Maxx,

извиняюсь, упустил момент про схему, это что имеется ввиду?

iap уже вам все ответил:)

DECLARE @SQL VARCHAR(MAX);
SELECT @SQL=ISNULL(@SQL,N'')+','+QUOTENAME(TABLE_SCHEMA)+'.'+QUOTENAME(TABLE_NAME)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE=N'BASE TABLE';

SET @SQL=STUFF(@SQL,1,1,N'DROP TABLE ');

PRINT @SQL;
/*EXECUTE(@SQL);*/
AKArmor,

только не выполняйте бездумно полученный скрипт у себя на продакшене!!!
Вы же видите, что это удаление всех пользовательских таблиц в базе.
Правда, таблицы, на которые ссылаются FOREIGN KEYs из других таблиц,
таблицы которым привязаны констрейнты-объекты DEFAULT, RULE и т.п.,
и некоторые другие не смогут удалиться вот так простио. Но всё же...
11 сен 14, 09:04    [16562398]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить