带有subselect的SQL Server语句无效

时间:2009-10-19 12:01:08

标签: sql sql-server-ce ibatis subquery

嘿,我正在使用iBATIS和SQL Server Compact Edition 3.5并尝试进行子选择

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

当我提交交易时,我得到SqlCeExceptionSSCE_M_QP_PARAMETERNOTALLOWED)。

符号'@'位置错误。我认为这是#{1}中无法预测的#ID#。 #ID#不是列的名称,它是应插入FORMINSTANCE的值我该如何解决这个问题?

TY

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

如果#ID#不在FORM表中(即参数),我认为你不能。即使#ID#是@ID的标准参数格式,SQL Server CE也不支持该位置的命名参数。