Было бы полезно, если бы вы указали версию ODBC, которую вы используете, и версию IDS (IBM Informix Dynamic Server), а также платформу, на которой они работают.
Когда я копирую и вставляю код из вопроса в SQLCMD (эквивалент DB-Access) в базе данных без таблицы, я получаю ошибку:
SQL -206: The specified table (ct_repairs) is not in the database.
Это указывает на то, что SQL синтаксически правильный.
Итак, почему вы видите ошибку?
Мой первый подозреваемый в виновной стороне - длинная (более 400) строка символов в конце. Когда-то (некоторое время назад, AFAICR) была верхняя граница 255 длины символьного строкового литерала. Если вы используете достаточно старую версию драйвера ODBC (или IDS), это может быть фактором.
Мой второй подозреваемый - случайная строка даты в двойных кавычках. Informix обычно слабо относится к тому, используете ли вы одинарные или двойные кавычки вокруг строк; это может быть полезно Однако есть способ сделать его педантичным, как стандарт SQL, требуя одинарных кавычек вокруг строк и используя двойные кавычки только для «идентификаторов с разделителями». Если переменная окружения DELIMIDENT установлена (возможно, через SETNET32 в Windows), будет вызван строгий режим, и когда я делаю это в SQLCMD, я получаю:
SQL -201: A syntax error has occurred.
Третий подозревает, что длинный столбец имеет тип BYTE или TEXT (или, возможно, BLOB или CLOB), и преобразование строкового литерала в этот тип отсутствует. Тем не менее, AFAIK, драйвер ODBC перепрыгивает через обручи, чтобы справиться с этой проблемой, и ошибка будет другой, вероятно, что-то вроде:
SQL -617: A blob data type must be supplied within this context.
Итак, на данный момент, я думаю, что DELIMIDENT стоит того, чтобы его преследовать - его, вероятно, легко исправить (либо путем обеспечения того, чтобы даты были заключены в одинарные кавычки, либо путем сброса DELIMIDENT). В противном случае попробуйте более короткую строку и посмотрите, работает ли она.
Но ваше базовое понимание верно - вы правильно используете двойные одинарные кавычки.