tl; dr: Доступ не имеет getdate
функции .
Но давайте все равно упростим этот запрос для чтения.
Интервал между запросамиможет упростить отслеживание.
SELECT
tExceptionsAll1.ID,
tExceptionsAll1.CardholderName,
PCARDS_ILL_DBO_CARD.PERSON_ID,
tExceptionsAll1.CardType,
tExceptionsAll1.Duration,
tExceptionsAll1.ExceptionType,
tExceptionsAll1.STL AS [Exp STL],
tExceptionsAll1.CL AS [Exp CL],
PCARDS_ILL_DBO_CARD.TRANS_LIMIT_AMT AS [Card STL],
PCARDS_ILL_DBO_CARD.MONTH_LIMIT_AMT AS [Card CL],
tExceptionsAll1.TerminationDate,
tExceptionsAll1.DCMNames,
tExceptionsAll1.ReminderDate
FROM PCARDS_ILL_DBO_CARD
INNER JOIN tExceptionsAll1
ON (PCARDS_ILL_DBO_CARD.CARD_ID = CLNG(tExceptionsAll1.CardID)) AND
(CLNG(PCARDS_ILL_DBO_CARD.PERSON_ID) = tExceptionsAll1.CardholderUIN)
WHERE (
((tExceptionsAll1.STL)>0) And
((tExceptionsAll1.CL)>0) And
((PCARDS_ILL_DBO_CARD.TRANS_LIMIT_AMT)<>tExceptionsAll1.STL) And
((PCARDS_ILL_DBO_CARD.MONTH_LIMIT_AMT)<>tExceptionsAll1.CL) And
((tExceptionsAll1.TerminationDate) Is Null)
)
OR
(
((tExceptionsAll1.TempSTL)>0) And
((tExceptionsAll1.TempCL)>0) And
((PCARDS_ILL_DBO_CARD.TRANS_LIMIT_AMT)<>tExceptionsAll1.TempSTL) And
((PCARDS_ILL_DBO_CARD.MONTH_LIMIT_AMT)<>tExceptionsAll1.TempCL) And
((tExceptionsAll1.TerminationDate) Is Null) And
((tExceptionsAll1.ReminderDate) < getdate())
);
Хороший текстовый редактор, такой как Atom , подойдет для вас.Кажется, что все они прекрасно сбалансированы.
Хотя парнины хороши для того, чтобы явно объяснить некоторые проблемы с приоритетом, например or
, слишком много всего лишь приукрашивают.Нет необходимости ставить скобки вокруг каждого сравнения.Давайте раздеваемся.Давайте также создадим псевдонимы таблиц для устранения избыточности.
SELECT
tea1.ID,
tea1.CardholderName,
pidc.PERSON_ID,
tea1.CardType,
tea1.Duration,
tea1.ExceptionType,
tea1.STL AS [Exp STL],
tea1.CL AS [Exp CL],
pidc.TRANS_LIMIT_AMT AS [Card STL],
pidc.MONTH_LIMIT_AMT AS [Card CL],
tea1.TerminationDate,
tea1.DCMNames,
tea1.ReminderDate
FROM pidc
INNER JOIN tea1
ON pidc.CARD_ID = CLNG(tea1.CardID) AND
CLNG(pidc.PERSON_ID) = tea1.CardholderUIN
WHERE (
tea1.STL > 0 AND
tea1.CL > 0 AND
pidc.TRANS_LIMIT_AMT <> tea1.STL AND
pidc.MONTH_LIMIT_AMT <> tea1.CL AND
tea1.TerminationDate IS NULL
)
OR
(
tea1.TempSTL > 0 AND
tea1.TempCL > 0 AND
pidc.TRANS_LIMIT_AMT <> tea1.TempSTL AND
pidc.MONTH_LIMIT_AMT <> tea1.TempCL AND
tea1.TerminationDate IS NULL AND
tea1.ReminderDate < getdate()
);
Возможно, вы можете придумать лучшие псевдонимы таблиц, чем я.
Ваша ошибка Wrong number of arguments used with function in query expression
.Теперь, когда все разнесено, мы можем видеть только два вызова функций: getdate()
и CLNG()
. CLNG - это функция доступа , но getdate()
не !Вместо этого мы должны использовать date () .