programing

네이티브 함수 'ISNULL'에 대한 호출에서 매개 변수 개수가 잘못됨

goodsources 2023. 10. 8. 09:50
반응형

네이티브 함수 'ISNULL'에 대한 호출에서 매개 변수 개수가 잘못됨

MS SQL Server 2008에서 MySQL로 변환하려는 질문이 있습니다.MSSQL에서 정상적으로 실행됩니다. 오류가 발생합니다.Incorrect parameter count in the call to native function 'ISNULL'".

어떻게 해결해야 합니까?

SELECT DISTINCT
    dbo.`@EIM_PROCESS_DATA`.U_Tax_year,
    dbo.`@EIM_PROCESS_DATA`.U_Employee_ID,
    CASE
        WHEN dbo.`@EIM_PROCESS_DATA`.U_PD_code = 'SYS033' THEN SUM(dbo.`@EIM_PROCESS_DATA`.U_Amount)
    END AS PAYE,
    CASE
        WHEN dbo.`@EIM_PROCESS_DATA`.U_PD_code = 'SYS014' THEN SUM(dbo.`@EIM_PROCESS_DATA`.U_Amount)
    END AS TOTALTAXABLE,
    dbo.OADM.CompnyName,
    dbo.OADM.CompnyAddr,
    dbo.OADM.TaxIdNum,
    dbo.OHEM.lastName + ', ' + ISNULL(dbo.OHEM.middleName, '') + '' + ISNULL(dbo.OHEM.firstName, '') AS EmployeeName
FROM
    dbo.`@EIM_PROCESS_DATA`
        INNER JOIN
    dbo.OHEM ON dbo.`@EIM_PROCESS_DATA`.U_Employee_ID = dbo.OHEM.empID
        CROSS JOIN
    dbo.OADM
GROUP BY dbo.`@EIM_PROCESS_DATA`.U_Tax_year , dbo.`@EIM_PROCESS_DATA`.U_Employee_ID , dbo.OADM.CompnyName , dbo.OADM.CompnyAddr , dbo.OADM.TaxIdNum , dbo.OHEM.lastName , dbo.OHEM.firstName , dbo.OHEM.middleName , dbo.`@EIM_PROCESS_DATA`.U_PD_code

MySQL

SELECT DISTINCT 
     processdata.taxYear, processdata.empID, 
     CASE WHEN processdata.edCode = 'SYS033' THEN SUM (processdata.amount) END AS PAYE, 
     CASE WHEN processdata.edCode = 'SYS014' THEN SUM (processdata.amount) END AS TOTALTAXABLE, 
     company.companyName, company.streetAddress, company.companyPIN, employeemaster.lastName + ', ' + IFNULL(employeemaster.middleName, '') 
     + ' ' + IFNULL(employeemaster.firstName, '') AS EmployeeName
FROM         
     processdata INNER JOIN
     employeemaster ON processdata.empID = employeemaster.empID 
     CROSS JOIN company
     GROUP BY processdata.taxYear, processdata.empID, company.companyName, company.streetAddress, company.companyPIN, 
     employeemaster.lastName, employeemaster.firstName, employeemaster.middleName, processdata.edCode

ISNULL과 동등한 MySQL은 IFNULL입니다.

expr1이 NULL이 아니면 IFNULL()이 expr1을 반환하고, 그렇지 않으면 expr2를 반환합니다.

SQL NULL Functions도 볼 수 있습니다.

MySQL의 ISNULL은 값이 null인지 확인하는 데 사용됩니다.

expr이 NULL이면 ISNULL()이 1을 반환하고, 그렇지 않으면 0을 반환합니다.

ANSI 표준 기능으로 전환할 것을 제안합니다.coalesce():

(dbo.OHEM.lastName + ', ' + coalesce(dbo.OHEM.middleName, '') + '' + coalesce(dbo.OHEM.firstName, '')
) AS EmployeeName

테이블 별칭을 포함하여 쿼리를 읽기 쉽게 만들 수도 있습니다.

편집:

참고로, 나는 전환의 방향을 놓친 것 같습니다.MySQL 쿼리는 다음을 사용합니다.concat():

CONCAT(OHEM.lastName, ', ', coalesce(OHEM.middleName, ''),
       coalesce(concat(' ', OHEM.firstName), '')
      ) AS EmployeeName

Junit 테스트를 실행할 때 오류가 발생했습니다.ISNULL(value)ISULL에 두 개의 파라미터가 필요하다는 오류가 발생했습니다.쿼리를 다음과 같이 변경하여 수정했습니다.value is null테스트가 진행되는 동안에도 코드는 동일하게 작동합니다.

언급URL : https://stackoverflow.com/questions/21380956/incorrect-parameter-count-in-the-call-to-native-function-isnull

반응형