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

标签 sql sql-server azure t-sql azure-sql-database

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

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

最佳答案

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

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;

关于sql - 如何使用一个 SQL 查询从数据库中删除所有外部表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54611867/

相关文章:

sql - 在取消挂起时退出 TOAD?

php - Select List后查询SQL数据库

mysql - MySQL 中是否有替代 SQL-Server uniqueidentifier 数据类型的方法?

azure - Cosmos DB - 有没有自动增量字段的方法?

sql - 传递给 LEFT 或 SUBSTRING 函数的无效长度参数 (SQL Server)

mysql - 使用 OR 子句连接两个表

java - JdbcTemplate 插入成功但数据库中没有行

sql - 需要根据唯一 ID 按时间戳提取最新记录

azure - 东亚和东南亚的数据中心位于哪个国家

.net - 如何本地开发Windows Azure应用程序