2017-02-13 10 views
-5

Мне нужно написать SQL-запрос для удаления всех таблиц и их данных из определенной схемы.SQL-запрос для удаления всех таблиц и их данных из определенной схемы

Например, в моей базе данных у меня есть таблицы со схемой dws6, и я хочу, чтобы скрипт в SQL удалял все таблицы в схеме dws6.

ответ

0

Этот запрос будет генерировать все операторы DROP TABLE для вас и распечатайте SQL statments

DECLARE @Sql VARCHAR(MAX) 
    SELECT @Sql = 
     COALESCE(@Sql, '') + 'DROP TABLE [DBO1].' + QUOTENAME(TABLE_NAME) + ';' + CHAR(13) 
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_SCHEMA = 'dws6' 

    PRINT @Sql 
+0

Можете ли вы пожалуйста объяснить мне важна COALESCE (@Sql, '') в этой ситуации. – balaji

+0

@balaji строка, которая пересечет размер varchar (8000), будет показывать ошибку (двоичные данные будут усечены), чтобы избежать этого, мы объединим строку – Chanukya

+0

. Ваше решение абсолютно нормально работает, мой вопрос касается COALESCE, я знаю, что является использование COALESCE. Но в этой ситуации я не могу понять, какова роль COALESCE() – balaji

1

Я Пытались ниже сценария и его прекрасно работает

DECLARE @SQL NVARCHAR(MAX); 

DECLARE db_cursor CURSOR FOR 
SELECT 'Drop Table ' + Table_Schema + '.' + Table_Name + ';' 
FROM Information_Schema.Tables 
WHERE Table_Type = 'BASE TABLE' 
AND Table_Schema = 'dws6' 

OPEN db_cursor 
FETCH NEXT FROM db_cursor INTO @SQL 

WHILE @@FETCH_STATUS = 0 
BEGIN 
--PRINT @SQL 
EXECUTE sp_executesql @SQL 

FETCH NEXT FROM db_cursor INTO @SQL 
END 
CLOSE db_cursor 
DEALLOCATE db_cursor;