TSQL如果它们出现在查找表中,则从数据库中删除表

时间:2016-10-26 10:03:50

标签: sql sql-server tsql

我想从 DatabaseOne 中删除一些表,如果它们被标记为放入 LookupTable

LookupTable 在设计中类似于以下内容:

    TableName        DropTable
=========================================
    TableA           Y
    TableB           Y
    TableC           N
    TableD           Y

因此,在此示例中,除TableC之外的所有内容都将被删除。

4 个答案:

答案 0 :(得分:1)

您可以尝试这样

declare @sql nvarchar(max) = ''
SELECT @SQL += N'DROP TABLE [' + name + '];'
FROM LookUpTable
WHERE DropTable = 'Y'
ORDER BY TableName 

select @sql
exec sp_executesql @sql

答案 1 :(得分:0)

这样的事情应该有效:

declare @SQL nvarchar(2000)

declare CRS_TABLE cursor fast_forward for
SELECT N'DROP TABLE [' + TableName + '];'
FROM LookupTable
WHERE DropTable = 'Y'
ORDER BY TableName

open CRS_TABLE
fetch next from CRS_TABLE into @SQL
while @@FETCH_STATUS = 0
begin
    print @SQL
    EXECUTE sp_executeSQL @SQL
    fetch next from CRS_TABLE into @SQL
end
close CRS_TABLE
deallocate CRS_TABLE

如果您对这些表格有限制,则需要先删除这些表格。

答案 2 :(得分:0)

尝试以下

DECLARE @SQL NVARCHAR(MAX)

    SET @SQL=(SELECT DISTINCT ( Stuff((SELECT '; DROP TABLE  ' + [TABLENAME]
                                       FROM   #TABLE1
                                       WHERE  DROPTABLE = 'Y'
                                       FOR XML PATH(''), TYPE) .value('.', 'NVARCHAR(MAX)'), 1, 2, ' ') ) LIST_OUTPUT
              FROM   #TABLE1)

    EXEC(@SQL) 

答案 3 :(得分:0)

似乎需要使用动态查询,

CREATE TABLE #LookUpTable
(
    TableName     VARCHAR(10),
    DropTable     VARCHAR(1)
)

INSERT INTO #LookUpTable
SELECT 'TableA',
       'Y'

INSERT INTO #LookUpTable
SELECT 'TableB',
       'Y'

INSERT INTO #LookUpTable
SELECT 'TableC',
       'N'

INSERT INTO #LookUpTable
SELECT 'TableD',
       'Y'

DECLARE @sql NVARCHAR(MAX) = ''
SELECT @SQL += N'DROP TABLE [' + TableName + '] GO '
FROM   #LookUpTable
WHERE  DropTable = 'Y'
ORDER BY
       TableName 

PRINT @sql

EXECUTE sp_executeSQL @sql

DROP TABLE #LookUpTable