sql - 在所有列中搜索并找到一个字符串值

我需要查找表中的任何列中是否存在字符串值。 是否可以在 Firebird 中自动创建执行此工作的过程或查询,而无需明确列名?

列名可以通过这个查询找到:

select RDB$RELATION_FIELDS.rdb$field_name as NC from RDB$RELATION_FIELDS where RDB$RELATION_FIELDS.rdb$relation_name = MY_Table_name

我会使用类似于 Firebird 中的程序:

http://www.mssqltips.com/sqlservertip/1522/searching-and-finding-a-string-value-in-all-columns-in-a-sql-server-table/

SET TERM ^^ ;

CREATE PROCEDURE P_FINDSTRINGINTABLE (
  STRTOFIND VarChar(255), 
  TBLNAME VarChar(255))
 returns (
  SQLCOMMAND VarChar(25000))
AS
DECLARE VARIABLE condSTR VARCHAR(8000);
DECLARE VARIABLE columnName VARCHAR(8000);
begin
  sqlCommand = 'select * from '|| upper( :TBLNAME );
  
  condSTR = '';
  for select RDB$RELATION_FIELDS.rdb$field_name as NC from RDB$RELATION_FIELDS where RDB$RELATION_FIELDS.rdb$relation_name = upper( :TBLNAME )
  into  :columnName  
  do begin
     condSTR = condSTR||columnName||' LIKE ''%'||STRTOFIND||'%'' OR ';   
  end
         
  
  
  IF ( CHAR_LENGTH(condSTR) > 0 ) THEN 
  begin
     condSTR = ' where ' || left(condSTR, CHAR_LENGTH (condSTR)-3)  || ';';
     sqlCommand = sqlCommand|| condSTR;  
  end
  ELSE sqlCommand = sqlCommand||';' ;

  
end ^^


SET TERM ; ^^

我已经为我的搜索创建了正确的字符串 SQL。 现在,如果我执行这个 Firebird 过程,它会将 SQL 命令作为字符串返回。

返回的select是否有自动执行的方法?

最佳答案

我相信,通过使用 EXECUTE STATEMENT 创建一个将返回值的 View ,您可以获得非常接近您想要的结果。

我的意思的例子:

sqlCommand = 'select * from '|| upper( :TBLNAME );

/* Rest of your code for creating the sqlCommand variable */

viewCommand = "RECREATE VIEW V_SEARCH_RESULTS AS " || sqlCommand;

EXECUTE STATEMENT viewCommand;

所以基本上您的过程 P_FINDSTRINGINTABLE 不会返回任何值,但会(重新)动态创建一个名为 V_SEARCH_RESULTS 的 View 。然后,您所要做的就是从此 View 中进行选择以查看结果。

https://stackoverflow.com/questions/10910968/

相关文章:

regex - 如何匹配同一字符串中的多组正则表达式模式?

asp.net - 读取已在 ASP.NET httpmodule 中设置的经典 ASP 中的服务器

wordpress - 如何在 Wordpress 中回显 100% 的 the_post?

c# - "Unable to find an entry point named"在 c# 中使用

r - 如何处理每次有多个点的时间序列(在 R 中)?

oracle - 使用 sqlloader 将 clob 列添加到 Oracle 数据库

hibernate - 如何定义两个抽象类之间的 ManyToOne 关系

git - 为什么提交后文件保留在索引中?

regex - 如何使用正则表达式查找字符串中出现的相同后续字符?

jquery-ui - jQuery UI 日期选择器。显示一种格式,保存其他格式