DB2 mit Parameter in der like-Anweisung

Das problem ist wie folgt:
Ich habe eine Prozedur in DB2 erhält, dass die paar Parameter und führt eine Filterung.
Einer der Parameter ist vom Datentyp VARCHAR Dank diesem ist es erforderlich, für eine like-Anweisung. Im SQLServer habe ich einfach mit dem string wie so '%'+prmName+'%' natürlich funktioniert es nicht in DB2 und muss ersetzt werden mit '%'||prmName||'%'.
Aber dann diese Fehlermeldung erscheint:

DB2 Database Error: ERROR [42824] [IBM][DB2/NT] SQL0132N A LIKE predicate or POSSTR scalar function is not valid because the first operand is not a string expression or the second operand is not a string. A LOCATE or POSITION scalar function is not valid because the first operand is not a string or the second operand is not a string expression. LINE NUMBER=6. SQLSTATE=42824

Nach Google-ing der Fehler, die ich fand heraus, dass DB2 nicht unterstützt Spaltennamen und-parameter in LIKE Aussagen, unter einigen anderen.

Da kann ich nicht ändern Sie den code der Anwendung, aber ich brauche, um die übertragung der Prozedur SQLServer DB2, jede Hilfe, um die Problemumgehung ist geschätzt.

Dies ist der code in SQL Server

CREATE PROCEDURE [DATABYUSERNAME]
    (
        @prmQuestionnaireId int,
        @prmStartDate DateTime,
        @prmEndDate DateTime,
        @prmUserName nvarchar(100)
    )       
AS
    SELECT * from ExecutedQuestionnaire EQ left outer join SecurityUserTable SUT
    on EQ.CreatedBy = SUT.UserId
    where EQ.CreationDate between @prmStartDate and @prmEndDate
    and SUT.Name LIKE '%'+@prmUserName+'%'
    and EQ.QuestionnaireId = @prmQuestionnaireId        
    RETURN 

- Und dies ist der Versuch, die select-Anweisung in DB2:

BEGIN ATOMIC
DECLARE bla VARCHAR(100);
DECLARE search VARCHAR(100);
set bla = 'sup';

SELECT EQ.EXECUTEDQUESTIONNAIREID,EQ.EXECUTEDQUESTIONNAIRESTATUSID,EQ.CREATIONDATE,EQ.CREATEDBY,EQ.ISCOMPLETE,EQ.QUESTIONNAIREID,
                    SUT.NAME, SUT.USR
    FROM EXECUTEDQUESTIONNAIRE EQ 
    LEFT OUTER JOIN SECURITYUSERTABLE SUT
    ON EQ.CREATEDBY = SUT.USERID
    WHERE EQ.CREATIONDATE BETWEEN '2010-12-01' and '2011-12-01'
    AND UPPER(SUT.NAME) LIKE Upper(CAST('%'||bla||'%' as VARCHAR(100)))
    AND EQ.QUESTIONNAIREID = 1;
END
InformationsquelleAutor Drakche | 2011-07-26
Schreibe einen Kommentar