問題は次のとおりです。 私はDB2で、いくつかのパラメーターを受け取り、フィルターをかけるプロシージャーを持っています。 パラメータの1つは、like文のために必要なVARCHARです。 SQLServerでは、単に'%'+prmName+'%'
のような文字列を追加するだけですが、当然これはDB2では機能しませんので、'%'||prmName||'%'
に置き換える必要があります。 しかし、その後、このエラーがポップアップ表示:同様のステートメントでパラメーターを使用するDB2
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
私はDB2が他のカップルの中で、LIKE
文でカラム名とパラメータをサポートすることができないことが判明グーグル-INGのエラーの後。
私はアプリケーションのコードを変更できませんが、SQLServerプロシージャをDB2に転送する必要があるため、回避策を見つけるための助けに感謝します。
これは、SQLServerの
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 '%'[email protected]+'%'
and EQ.QuestionnaireId = @prmQuestionnaireId
RETURN
のコードであり、これはDB2でのSELECT文の試みです:
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
@Drakche:次にこれ?:AND UPPER(SUT.NAME)LIKE Upper( '%' || CAST(bla as CHAR(3))|| '%') ' –
'set bla =' %SUP% ';'は値を渡す必要があるため使用できません。 「SUP」はダミー値です。しかし、最初の解決策があります。ありがとう。 – Drakche
+1、これも私の問題を解決しました。 –