Используя эту таблицу:
CREATE TABLE t (i int PRIMARY KEY, j variant);
Я пытаюсь вставить в таблицу некоторый объект JSON, например.
INSERT INTO t (i, j) VALUES (1, object_construct('a', 1));
Однако это не удается с:
Ошибка SQL [2014] [22000]: ошибка компиляции SQL: Недопустимое выражение [OBJECT_CONSTRUCT('a', 1)] в предложении VALUES
Я могу обойти проблему с этим:
INSERT INTO t (i, j) VALUES (1, null);
UPDATE t SET j = object_construct('a', 1) WHERE i = 1;
Почему я не могу использовать OBJECT_CONSTRUCT в выражении INSERT?
Инструкция предлагает использовать INSERT.. SELECT:
Чтобы вставить данные VARIANT напрямую, используйте IIS (INSERT INTO ... SELECT).
Т.е. это работает:
INSERT INTO t (i, j) SELECT 1, object_construct('a', 1);
Однако он не предлагает никаких объяснений в отношении ограничения или того, почему необходим этот конкретный обходной путь.
ВСТАВИТЬ В... ЗНАЧЕНИЯ:
Некоторые выражения нельзя указывать в предложении VALUES. В качестве альтернативы укажите выражение в предложении запроса. Например, вы можете заменить: INSERT INTO table1 (ID, varchar1, variant1) VALUES (4, 'Fourier', PARSE_JSON('{ "key1": "value1", "key2": "value2" }')); с: INSERT INTO table1 (ID, varchar1, variant1) SELECT 4, 'Fourier', PARSE_JSON('{ "key1": "value1", "key2": "value2" }');
ЦЕННОСТИ:
<expr> Каждое выражение должно быть константой или выражением, которое может быть оценено как константа во время компиляции оператора SQL. Большинство простых арифметических выражений и строковых функций могут быть вычислены во время компиляции, но большинство других выражений — нет.