2009-10-19 67 views
0

嘿,我使用iBATIS与SQL Server精简版3.5和尝试做一个子查询SQL Server语句无效

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

当我提交事务,我得到一个​​(SSCE_M_QP_PARAMETERNOTALLOWED)。

符号'@'在错误的地方。我认为这是#SELECT中不可预测的编号。 #ID#不是该列的名称,而是应该插入到FORMINSTANCE中的值如何解决此问题?

TY

回答

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 2009-10-19 12:25:40

+0

然后它是一个字符串,应该表示为''#ID#'',不是吗? – Tomalak 2009-10-19 12:34:11

+0

你是对的,但是这也会导致相同的异常 – codevour 2009-10-19 12:41:19

0

我不认为你可以,如果#编号是不是在形式表(即参数)。即使#ID#采用@ID的标准参数格式,SQL Server CE也不支持该位置的命名参数。

+0

嗯,那么也许我的subselect是错误的结构?但它的作品,如果我不使用命名参数,并尝试而不是#ID# - >'UUID'。 – codevour 2009-10-19 12:34:54