" select top @size  a.Action_ID, a.[User_ID], a.Total_Score ,b.Action_Desp,b.CreateTime ,b.Point_Change from "
        + " tbl_Action_Hist b inner join tbl_Record_Score a on a.Action_ID=b.Action_ID  where a.Action_ID  not in (select top (@size * (@now -1)) a.Action_ID  from  "
        + " tbl_Action_Hist b ) and b.Student_ID=@stuid and b.Point_Change like '-% ' and b.CreateTime between @starTime and  @endTime"
这些参数的类型string stuid, int size, int now, DateTime starTime, DateTime endTime
在sql里面没报错,但在程序里面运行之后报错。
'@size' 附近有语法错误。
关键字 'and' 附近有语法错误。 

解决方案 »

  1.   

    你这里的@size变量要直接转换成数值再拼接入SQL语句。比如:
    int size = 10;
    "select top " + @size + " a.Action_ID, ......"你这里的两个错误都是这个问题引起的。
      

  2.   

    在外面@size 是变量 ,放到字符串里面就变成'@size'字符了。
      

  3.   

    可是我以前写int类型的变量也是直接写的啊,难道是因为在top 后面吗
      

  4.   


    这样是可以的:
    declare @size int
    set @size=2
    select top (@size) * from master..spt_values你把括号去掉就报错,主要是你放到字符串里面了。
      

  5.   


    select * from table  where  Action_ID=@actid
    这句里面,Action_ID也是int类型,为什么就不会报错呢
      

  6.   

    Quote: 引用 6 楼 heli_1005 的回复:

    select * from table  where  Action_ID=@actid
    Quote:
    如果你把这句语句在程序中用引号括起来,再让SQL执行,肯定会报错,你在SQL窗口下当然没错。
      

  7.   

      StringBuilder strBl = new StringBuilder("select  Action_ID, Question_ID, Type, Score, Fluency, Accuracy, Inegrity, "
            + " Rhythm, Others from  tbl_Record_Score_Detail where Action_ID=@actid");
    真的没报错