当前位置: 首页 > 面试题库 >

如何在整个数据库中查找字符串?

和和裕
2023-03-14
问题内容

我有一个特定的字符串,例如“ 123abcd”,但我不知道表的名称,甚至不知道SQL
Server数据库中表内的列的名称。我想通过选择找到它并显示相关字符串的所有列,所以我想知道以下内容:

select * from Database.dbo.* where * like  '%123abcd%'

出于显而易见的原因,它不起作用,但是有一种简单的方法可以创建一个select语句来执行类似的操作?


问题答案:

这将起作用:

DECLARE @MyValue NVarChar(4000) = 'something';

SELECT S.name SchemaName, T.name TableName
INTO #T
FROM sys.schemas S INNER JOIN
     sys.tables T ON S.schema_id = T.schema_id;

WHILE (EXISTS (SELECT * FROM #T)) BEGIN
  DECLARE @SQL NVarChar(4000) = 'SELECT * FROM $$TableName WHERE (0 = 1) ';
  DECLARE @TableName NVarChar(1000) = (
    SELECT TOP 1 SchemaName + '.' + TableName FROM #T
  );
  SELECT @SQL = REPLACE(@SQL, '$$TableName', @TableName);

  DECLARE @Cols NVarChar(4000) = '';

  SELECT
    @Cols = COALESCE(@Cols + 'OR CONVERT(NVarChar(4000), ', '') + C.name + ') = CONVERT(NVarChar(4000), ''$$MyValue'') '
  FROM sys.columns C
  WHERE C.object_id = OBJECT_ID(@TableName);

  SELECT @Cols = REPLACE(@Cols, '$$MyValue', @MyValue);
  SELECT @SQL = @SQL + @Cols;

  EXECUTE(@SQL);

  DELETE FROM #T
  WHERE SchemaName + '.' + TableName = @TableName;
END;

DROP TABLE #T;

不过,有几点警告。首先, 这是极其缓慢且未优化的
。所有值都将被nvarchar简单地转换,以便可以比较它们而不会出错。您可能会遇到一些问题,例如datetime无法按预期方式转换值,因此在应有的值不匹配时(假否定)。

使用WHERE (0 = 1)可以OR简化子句的构建。如果没有匹配项,则不会返回任何行。



 类似资料:
  • 问题内容: 我需要找到表中的所有行,其中特定字段的字符串在两个或多个位置重复。 可以在MySQL语句中完成吗? 编辑 我需要获取每一行,而不仅仅是计数有多少重复项。我希望能够编辑这些字段。 问题答案: 是的,尝试这样的事情:

  • 问题内容: 我有一个领域的文档表,,并包含像字符串值 U12,U13,U14,现在我当前登录的用户,我想在其中找到的所有记录包含了我的手段我就是。现在如何编写查询以获取记录。 我的查询是: 但我在“ where子句”中收到错误未知列“ U13” 问题答案: 您的字符串连接混乱了,应该是:( 进一步简化了 ) 当上面的语句被解析后,它将看起来像这样: 作为一个旁注,查询是脆弱的,如果值( 小号 变量

  • 问题内容: 我正在尝试在整个Oracle数据库中查找特定的字符串。 我已经在此处的另一个主题(在所有表中的所有字段中搜索特定值(Oracle))中遵循了该示例,并且当字符串是一列中的整个值时,它就可以正常工作。但是我需要搜索字符串作为列的一部分。 例如,如果我搜索“ Alert”,则应返回所有带有“ Alert”的列和所有带有“ Alert_QB”的列 这是当前的查询: 我认为它靠近“使用’ALE

  • 问题内容: 我想查找并替换整个数据库,而不仅仅是一个表。 我该如何更改以下脚本才能工作? 我只使用星号吗? 问题答案: sqldump到文本文件,查找/替换,重新导入sqldump。 将数据库转储到文本文件 对其进行更改后,还原数据库。

  • 问题内容: 因此,我正在编写一个从redis读取的节点应用程序,我想执行某种查询,该查询返回有人知道怎么做的数据库数量。 因此,现在基本上我所拥有的是一种获取数据库中所有密钥的方法,但是我希望级别更高,我想遍历所有数据库然后获取所有密钥。这是用于获取当前数据库的所有密钥的代码。 问题答案: 解决方案1 正如@carebdayrvis所提到的,您可以使用command获取数据库信息,并解析该信息以获

  • 我想从mongoDB数据库中获取与我在搜索栏中键入的关键字相匹配的记录(车辆广告),并在reactJS前端显示它们。记录(车辆广告)的数据库模式由以下字段组成(制造商、地址、注册、年份、内色、外色、传输、车身类型、类别、型号)。因此,如果用户在搜索栏中键入像拉合尔丰田这样的东西,用户应该得到所有的记录(汽车广告),其中制造商是丰田,地址是拉合尔。 这是我的前端代码 家庭过滤器。js(它从搜索栏获取