sql - 在数据库的所有现有表中搜索数据
问题描述
我想在数据库的所有现有表中搜索日期“2017-08-08 09:26”,并获取包含该日期的表的列名和表名。所以我可以在 a 列的表 A 中找到该日期。
示例:“2017-08-08 09:26”存在于表“A”的“a”列中
请给我一些解决方案的建议。
现在我正在使用这个查询,我可以在其中搜索列,但我想在我的数据库中的表的列中搜索数据。
SELECT
sys.columns.name AS ColumnName,
sys.tables.name AS TableName
FROM
sys.columns
JOIN
sys.tables
ON
sys.columns.object_id = sys.tables.object_id
WHERE
sys.columns.name LIKE '%service%'
解决方案
使用以下脚本获取整个数据库搜索
DECLARE
@SearchStr nvarchar(100) = 'Pass'
BEGIN
DECLARE @Results TABLE(ColumnName nvarchar(370), ColumnValue nvarchar(3630))
SET NOCOUNT ON
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 varchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO @Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
)
END
END
END
SELECT ColumnName, ColumnValue FROM @Results
END
推荐阅读
- python - Cumsum 与 groupby 用于日期累积
- python - 在 Sympy 中使用 lambdify 将具有复指数的表达式转换为函数
- python - 如何将命令中的值保存到 .json 中?
- javascript - 如何在 ReactJS 中添加类名“活动”
- .net - 将带有 ref 变量的 SOAP api 转换为 RESTFUL api 的最佳方法
- java - JavaFX如何在某个阶段大小后禁用调整大小
- php - 无法使用 Wordpress 编辑器编辑 functions.php,但可以编辑其他文件,例如 CSS 和页面
- java - CentOS7 hadoop wordcount 退出代码为 127
- kotlin - 应用插件请求时发生异常 [id: 'org.openjfx.javafxplugin']
- java - 尝试启动 Netbeans 12