代码之家  ›  专栏  ›  技术社区  ›  Christopher Klewes

带有subselect的SQL Server语句无效

  •  0
  • Christopher Klewes  · 技术社区  · 16 年前

    嘿,我正在将iBATIS与SQL Server Compact 3.5结合使用,并尝试执行一个嵌套选择

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

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

    那个符号 @ “在错误的地方。我想这是不可预测的身份证 SELECT .#id不是列的名称,它是应该插入到FormInstance中的值。如何修复此问题?

    TY

    2 回复  |  直到 16 年前
        1
  •  1
  •   Tomalak    16 年前

    如果列名称的部分

    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'
    
        2
  •  0
  •   MartW    16 年前

    我认为如果表单表中没有ID(即参数),您就不能这样做。即使id是@id的标准参数格式,SQL Server CE也不支持该位置的命名参数。