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

问题描述 投票:2回答:2

我需要查找表中的任何一列是否存在字符串值。能否在Firebird中自动创建过程或查询,在不明确列名的情况下执行这项工作?

列名可以通过这个查询来查找。

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

我将使用一个类似于火鸟的程序。

http:/www.mssqltips.comsqlservertip1522searching-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吗?

sql select firebird
2个回答
1
投票

你可以通过使用以下方法来实现你想要的东西 EXECUTE STATEMENT 来创建一个视图,然后返回这些值。

举个例子说明我的意思。

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的视图。然后你所要做的就是在这个视图中进行选择来查看结果。


1
投票

如果你需要在你的数据库中进行全文搜索,我建议你使用与Firebird集成的专用搜索引擎,这是出于性能考虑。这是出于性能的考虑,可以看看SphinxSearch或Solr引擎。

© www.soinside.com 2019 - 2024. All rights reserved.