2016-06-27 4 views
0

В настоящее время я в основном сбросив стол как стол капли scratch..TableNameУдаление таблицы на основе имени другой таблицы

Если у меня есть имя всей таблицы в другой отдельной таблице, то я могу сделать, выполнить, чтобы упасть таблицу, присоединяясь вместо копирования и вставки имени каждый раз?

Так что я хочу сделать что-то вроде этого .. но я не уверен, как написать это SQL. Я использую версию 2008 года. Имя таблицы соответствует таблице TableName, а затем удаляет из базы данных с нуля.

+0

Желание сделать это указывает на то, что вы, возможно, «делаете sql» неправильно. Обычно вы не создаете/отбрасываете таблицы с именами, определенными во время выполнения. Сказав это, вы * можете * сделать это с помощью динамического SQL. Вам нужно построить строку, состоящую из группы операторов 'drop', а затем выполнить ее как SQL. См. [Этот вопрос] (http://stackoverflow.com/questions/4393/drop-all-tables-whose-names-begin-with-a-certain-string) для некоторого вдохновения. – Blorgbeard

ответ

0

Вы можете легко создать курсор, который перемещается по строкам таблицы и динамически создает и выполняет оператор drop для каждой таблицы. Что-то вроде этого должно сделать трюк:

DECLARE @i_Current_Drop_Statement NVARCHAR(MAX) 

DECLARE Drop_Table_Statements CURSOR LOCAL FAST_FORWARD 
    FOR 
    SELECT N'DROP TABLE ' + QUOTENAME(SCHEMA_NAME(t.schema_id)) + '.' + QUOTENAME(t.name) 
    FROM sys.tables t --Or replace this with your table that contains the tables to drop 

OPEN Drop_Table_Statements 
FETCH NEXT FROM Drop_Table_Statements INTO @i_Current_Drop_Statement 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    EXEC sp_executesql @i_Current_Drop_Statement 

    FETCH NEXT FROM Drop_Table_Statements INTO @i_Current_Drop_Statement 
END 

CLOSE Drop_Table_Statements 
DEALLOCATE Drop_Table_Statements 
Смежные вопросы