MS Access @@身份查询问题

时间:2013-11-09 14:10:47

标签: sql ms-access

有人可以通过以下查询告诉我这个问题吗?我正在运行MS Access及其提供

  

查询表达式'id = @@ IDENTITY'

中的语法错误

代码:

public DosageBO SaveDosage(DosageBO dosage)
{
   try
   {
      using (IDbConnection connection = OpenConnection())
      {
         StringBuilder sql = new StringBuilder();
         sql.AppendLine("INSERT INTO dosage_master ( medicine_type, dosage, remarks, updateby, updatedate )");
         sql.AppendLine("VALUES (@type, @dose, @remarks, @updateby, NOW());");

         var parameters = new
                    {
                        type = dosage.MedicineType,
                        dose = dosage.Dosage,
                        remarks = dosage.Remarks,
                        updateby = Environment.UserName
                    };

         connection.Execute(sql.ToString(), parameters);

         return connection.Query<DosageBO>("SELECT medicine_type as MedicineType, dosage, remarks FROM dosage_master WHERE id = @@IDENTITY").FirstOrDefault();
      }
   }
   catch
   {
      throw;
   }
}

3 个答案:

答案 0 :(得分:1)

SELECT @@Identity是一个专门的查询。并且@@Identity仅在该上下文中有效。如果您尝试在其他地方使用@@Identity,如在WHERE子句中,则db引擎将抛出错误。

您必须从SELECT @@Identity检索值,保存它,然后在其他查询中使用该保存的值。

答案 1 :(得分:0)

删除最后的)

WHERE id = @@IDENTITY) 
                     ^---here

答案 2 :(得分:0)

您是否在选择查询之前在此批次中插入了一行? 据我所知,@@ IDENTITY只有在插入行后才能直接生成,从而生成一个标识值,即插入到自动增量标识列。

再次编辑: 尝试将其括在子查询中,例如id = (SELECT @@IDENTITY)