Mysql SQL来删除以公共前缀开头的表

Mysql SQL来删除以公共前缀开头的表,mysql,sql,database,Mysql,Sql,Database,我希望编写一个SQL查询/存储过程,该过程将删除数据库中以公共前缀(如表)开头的表 但是,表的名称以前缀开头,后跟一个数字,如果可以将表编号附加到前缀中,我不想将它们全部删除 谢谢你看这个: 可以使用表前缀上的约束联接该表 希望对您有所帮助,并从中获得乐趣查找列如下所示的所有表格: SELECT c.name AS 'ColumnName' ,t.name AS 'TableName' FROM sys.columns c JOIN

我希望编写一个SQL查询/存储过程,该过程将删除数据库中以公共前缀(如表)开头的表

但是,表的名称以前缀开头,后跟一个数字,如果可以将表编号附加到前缀中,我不想将它们全部删除

谢谢你看这个:

可以使用表前缀上的约束联接该表


希望对您有所帮助,并从中获得乐趣

查找列如下所示的所有表格:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       c.name LIKE '%SubId%'
ORDER BY    TableName
            ,ColumnName;
查找表名称如下所示的所有表:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       t.name LIKE '%tbl%'
ORDER BY    TableName
            ,ColumnName;
查找特定架构中的所有表:

SELECT t.name 
  FROM sys.tables AS t
  INNER JOIN sys.schemas AS s
  ON t.[schema_id] = s.[schema_id]
  WHERE s.name = N'cmc';
一旦有了需要删除的表,就可以为每个表编写delete语句。或者,您可以使用类似以下内容:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName',
            'drop table ' + t.name
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       t.name LIKE '%tbl%'
ORDER BY    TableName
            ,ColumnName;
编辑

下面是关于where子句的更详细信息的select:

SELECT      c.name  AS 'ColumnName'
            ,t.name AS 'TableName'          
FROM        sys.columns c
JOIN        sys.tables  t   ON c.object_id = t.object_id
WHERE       
            t.name LIKE 'tbl%' -- where the table name starts with the letters 'tbl'
            OR t.name LIKE 'tbl%123%' -- where the table name starts with the letters 'tbl' and has the numbers '123' in the table name
            OR c.name LIKE '%colName%' -- where a column has a name that contains the letters 'colName'

ORDER BY    TableName
            ,ColumnName;

查找所有以前缀开头的表名,动态创建drop查询并将结果插入临时表,如下所示:

DECLARE @YourPrefix VARCHAR(MAX) = 'table'
SELECT    
    'DROP TABLE ' + t.name AS DropQuery
INTO #TMP
FROM        
      sys.tables  t   
WHERE
    t.name LIKE @YourPrefix + '%'
在临时表上写入游标,并使用sp_executesql执行如下的drop查询

DECLARE @Query NVARCHAR(MAX) = NULL
DECLARE C CURSOR FOR
    SELECT 
        T.DropQuery 
    FROM 
        #TMP T
OPEN C
WHILE 1=1
BEGIN
    FETCH NEXT FROM C INTO @Query
    IF @@FETCH_STATUS <> 0 BREAK;
    EXEC sp_executesql @Query
END
CLOSE C
DEALLOCATE C

删除所有以前缀开头的表。

能否扩展“我不想全部删除”我不想删除所有包含前缀的表,因为它们有数百个,我想删除包含前缀和数字附件的表有规则确定要删除或保留哪些吗?如果我想使用此方法查找表名,这些规则将如何工作?但是,筛选ID与我在其中一列中指定的ID匹配的表我不确定是否理解你完全明白。如果对我的答案的编辑对你没有帮助,那么请澄清你的问题,但添加一些更多的信息和你试图做什么的例子。