Mysql SQL来删除以公共前缀开头的表
我希望编写一个SQL查询/存储过程,该过程将删除数据库中以公共前缀(如表)开头的表 但是,表的名称以前缀开头,后跟一个数字,如果可以将表编号附加到前缀中,我不想将它们全部删除 谢谢你看这个: 可以使用表前缀上的约束联接该表Mysql SQL来删除以公共前缀开头的表,mysql,sql,database,Mysql,Sql,Database,我希望编写一个SQL查询/存储过程,该过程将删除数据库中以公共前缀(如表)开头的表 但是,表的名称以前缀开头,后跟一个数字,如果可以将表编号附加到前缀中,我不想将它们全部删除 谢谢你看这个: 可以使用表前缀上的约束联接该表 希望对您有所帮助,并从中获得乐趣查找列如下所示的所有表格: SELECT c.name AS 'ColumnName' ,t.name AS 'TableName' FROM sys.columns c JOIN
希望对您有所帮助,并从中获得乐趣查找列如下所示的所有表格:
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匹配的表我不确定是否理解你完全明白。如果对我的答案的编辑对你没有帮助,那么请澄清你的问题,但添加一些更多的信息和你试图做什么的例子。