我需要查找表中的任何列中是否存在字符串值。 是否可以在 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/