我使用以下内容在特定数据库的存储过程中搜索字符串:
USE DBname
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%xxx%'
修改上面的内容是否容易,以便在特定的 db "DBname" 中搜索表名?
我使用以下内容在特定数据库的存储过程中搜索字符串:
USE DBname
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%xxx%'
修改上面的内容是否容易,以便在特定的 db "DBname" 中搜索表名?
我正在使用它并且工作正常
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%%'
select name
from DBname.sys.tables
where name like '%xxx%'
and is_ms_shipped = 0; -- << comment out if you really want to see them
如果您想查看所有数据库服务器范围内的所有表并获取输出,您可以使用未记录的sp_MSforeachdb过程:
sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
我假设您想将数据库名称作为参数传递,而不仅仅是运行:
SELECT *
FROM DBName.sys.tables
WHERE Name LIKE '%XXX%'
如果是这样,您可以使用动态 SQL 将 dbname 添加到查询中:
DECLARE @DBName NVARCHAR(200) = 'YourDBName',
@TableName NVARCHAR(200) = 'SomeString';
IF NOT EXISTS (SELECT 1 FROM master.sys.databases WHERE Name = @DBName)
BEGIN
PRINT 'DATABASE NOT FOUND';
RETURN;
END;
DECLARE @SQL NVARCHAR(MAX) = ' SELECT Name
FROM ' + QUOTENAME(@DBName) + '.sys.tables
WHERE Name LIKE ''%'' + @Table + ''%''';
EXECUTE SP_EXECUTESQL @SQL, N'@Table NVARCHAR(200)', @TableName;
我知道这是一个旧线程,但如果您更喜欢不区分大小写的搜索:
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE Lower(TABLE_NAME) LIKE Lower('%%')
添加到@[RichardTheKiwi] 的答案。
每当我搜索表列表时,通常我想从所有表中选择或删除它们。下面是为您生成这些脚本的脚本。
生成的选择脚本还添加了一个 tableName 列,以便您知道正在查看的表:
select 'select ''' + name + ''' as TableName, * from ' + name as SelectTable,
'delete from ' + name as DeleteTable
from sys.tables
where name like '%xxxx%'
and is_ms_shipped = 0;
我想为您拥有的每个架构发布一个简单的解决方案。如果您使用的是 MySQL DB,您可以简单地从您的模式中获取所有表的名称并在其上添加 WHERE-LIKE 条件。您也可以使用通常的命令行来执行此操作,如下所示:
SHOW TABLES WHERE tables_in_<your_shcema_name> LIKE '%<table_partial_name>%';
wheretables_in_<your_shcema_name>
返回列的SHOW TABLES
命令名称。
您也可以使用 show 命令。
show tables like '%tableName%'