如何使用一个SQL查询从数据库中删除所有外部表?

时间:2019-02-09 23:29:27

标签: sql sql-server azure tsql azure-sql-database

我需要删除所有外部表,因为我需要重新创建外部数据源。但是,您不能删除具有使用该特定数据源的外部表的外部数据源。但是,我不想键入所有表的名称来删除它们。

我搜索了Stack Overflow,但实际上找不到该特定问题的答案。我找到了一个关于删除所有表的更一般性问题的答案,并且能够修改解决方案。我要提出这个问题来记录我能够创建的解决方案,所以您想知道这个特定问题或使用更通用的方式删除SQL DB元素时,就可以利用此解决方案。

1 个答案:

答案 0 :(得分:1)

我能够通过修改Pரதீப்从this answer获得的解决方案来获得此解决方案。

DECLARE @sql NVARCHAR(max)=''
SELECT @sql += ' DROP EXTERNAL TABLE ' + QUOTENAME(S.name) + '.' + QUOTENAME(E.name) + '; '
FROM sys.external_tables  E
    LEFT JOIN sys.schemas S
ON E.schema_id = S.schema_id
Exec sp_executesql @sql

但是,尽管该解决方案在大多数情况下都有效,但是在外部表名称中可能会出现意外字符而导致错误。因此,丹·古兹曼(Dan Guzman)在评论中建议的替代方案将是一种更安全的替代方案。

DECLARE @SQL nvarchar(MAX) = ( SELECT STRING_AGG(N'DROP EXTERNAL TABLE ' + QUOTENAME(name), N';') + N';' FROM sys.external_tables ); EXECUTE sp_executesql @SQL;