2009-10-19 65 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