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

10 浏览
0 Comments

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

由于需要重新创建外部数据源,我需要删除所有外部表。然而,如果有外部表使用该特定数据源,你就无法删除该外部数据源。然而,我不想逐个输入表名来删除它们。

我在Stack Overflow上搜索,实际上没有找到这个特定问题的答案。我找到了一个更一般的关于删除所有表的问题的答案,并成功修改了解决方案。我创建了这个问题来记录我能够创建的解决方案,所以如果你对这个特定问题感兴趣或者想要以更一般的方式删除SQL数据库的元素,你可以使用这个解决方案。

0
0 Comments

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

问题的出现原因:

该问题来源于一个用户在讨论论坛上提出的问题。该用户想要知道如何使用一个SQL查询从数据库中删除所有外部表。用户参考了一个来自Pரதீப்的回答,并进行了修改,但发现该解决方案在外部表名称中包含意外字符时可能会出错。因此,其他用户在评论中提供了一种更安全的解决方案。

解决方法:

在修改后的解决方案中,用户使用了以下SQL查询:

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

这个查询使用了STRING_AGG函数来将所有外部表的DROP语句连接成一个字符串,并通过执行sp_executesql来执行这个字符串。

用户根据其他用户的建议,将原始解决方案中的字符串拼接操作改为了STRING_AGG函数,因为字符串拼接操作可能会产生错误的结果。经过阅读STRING_AGG的文档,用户确认这是一个更好的解决方案,并将其添加到了回答中以提高可见性。

通过修改一个来自Pரதீப்的解决方案,用户成功地找到了一种使用一个SQL查询从数据库中删除所有外部表的方法。但由于原始解决方案可能会在外部表名称中包含意外字符时出错,其他用户提供了一种更安全的解决方案。这个更安全的解决方案使用了STRING_AGG函数来连接所有外部表的DROP语句,并通过执行sp_executesql来执行这个字符串。用户对这个解决方案进行了验证,并将其添加到了回答中以提高可见性。

0