2009-10-19 2 views
0

Эй, я использую Ibatis с SQL Server Compact Edition 3.5 и попытаться сделать подвыборSQL Server с подвыборкой недействительно

INSERT INTO FORMINSTANCE (ID, ID_FORM) 
    SELECT #ID#, f.ID 
    FROM FORM f 
    WHERE ID_PROCESS='10804' 

Когда я совершить сделку я получаю SqlCeException (SSCE_M_QP_PARAMETERNOTALLOWED).

То, что символ «@» находится не в том месте. Я думаю, что это # ​​ID #, который непредсказуем в SELECT. # ID # не является именем столбца, это значение, которое должно быть вставлено в FORMINSTANCE. Как я могу это исправить?

ти

ответ

1

Если # часть имени столбца ...

INSERT INTO FORMINSTANCE (ID, ID_FORM) 
SELECT [#ID#], f.ID 
FROM FORM f 
WHERE ID_PROCESS='10804' 

Если по какой-то причине вы хотели динамический столбец должен быть выбран в позиции № 1 (не то, что я действительно думаю, что это является то, что вы до, но в любом случае), вы могли бы уйти с:

INSERT INTO FORMINSTANCE (ID, ID_FORM) 
SELECT 
    CASE 
    WHEN @ID = 'foo' THEN foo 
    WHEN @ID = 'bar' THEN bar 
    ELSE NULL 
    END, 
    f.ID 
FROM 
    FORM f 
WHERE 
    ID_PROCESS='10804' 
+0

# ID # не является именем столбца, это значение, которое должно быть вставлено в FORMINSTANCE – codevour

+0

Тогда это строка и должна быть обозначена как '' # ID # '', не так ли? – Tomalak

+0

Вы правы, но это также приводит к тому же исключению – codevour

0

Я не думаю, что вы можете, если # ID # не в виде таблицы (т.е. параметр). Даже если # ID # был в стандартном формате формата @ID, SQL Server CE не поддерживает именованные параметры в этом местоположении.

+0

Хм, может быть, мой подзаголовок неверен структурирован? Но он работает, если я не использую именованные параметры и не пытаюсь вместо # ID # -> 'UUID'. – codevour