如何根据 sys.objects 删除表格?

10 浏览
0 Comments

如何根据 sys.objects 删除表格?

我正在尝试从每个服务器/数据库中删除表格。

我运行了一个查询,获取了不同服务器上每个数据库中表格的列表。

SELECT * 
FROM sys.objects 
WHERE type = 'u' AND name LIKE '%JSK%'

我想要删除这些表格。

我需要查询如何执行此操作?

0
0 Comments

在某些情况下,需要根据sys.objects来删除表。下面是一个示例代码,可以根据表名的模式来删除数据库中的表。假设没有外键关系,删除表的顺序并不重要。

DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'
DROP TABLE '
  + QUOTENAME(SCHEMA_NAME([schema_id]))
  + '.' + QUOTENAME(name) + ';'
FROM sys.tables
WHERE name LIKE '%JSK%';
PRINT @sql;
-- EXEC sp_executesql @sql;

以上代码中,首先声明了一个变量@sql用于存储生成的SQL语句。然后使用SELECT语句将需要删除的表名拼接到@sql变量中。在这个示例中,我们使用了sys.tables来获取所有表的信息,并使用WHERE子句过滤出名字中包含"JSK"的表。然后使用QUOTENAME函数来确保表名的安全性,防止SQL注入攻击。最后,使用PRINT语句来打印生成的SQL语句,以便进行检查。如果确认无误,可以取消注释EXEC sp_executesql语句来执行删除操作。

这种方法可以根据需要删除具有特定表名模式的所有表,而不必手动逐个删除。只需将适当的模式更新到WHERE子句中即可。

注意:在执行删除操作之前,请务必进行备份以防止意外数据丢失。

0