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

How to drop all external tables from a database with one SQL query?

本问题已经有最佳答案,请猛点这里访问。

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

我搜索了Stack Overflow,实际上无法找到这个特定问题的答案。 我找到了删除所有表的更一般问题的答案,并且能够修改解决方案。 我正在提出这个问题来记录我能够创建的解决方案,所以你想知道这个特定问题或者使用更一般的方法来删除SQL DB的元素,你可以利用这个解决方案。


通过P ?????修改这个答案的解决方案,我能够得到这个解决方案。

1
2
3
4
5
6
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在评论中提出的这种替代方案将是一种更安全的替代方案。

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