EXEC( 'INSERT INTO #MID SELECT MID FROM'+' SF'+@YEAR+@MONTH+' '+'A,'
+'PP'+@YEAR+@MONTH+' '+'B'+
' '+'WHERE A.XLH=B.XLH AND B.FB=10 AND A.RQ>='+@KSRQ+
' '+'AND A.RQ<='+@JSRQ+
' '+'AND A.STATE&5=4')

解决方案 »

  1.   

    EXEC( 'INSERT INTO #MID SELECT MID FROM'+' SF'+@YEAR+@MONTH+' '+' A,'
    +'PP'+@YEAR+@MONTH+' '+' B'+
    ' WHERE A.XLH=B.XLH AND B.FB=10 AND A.RQ>='''+@KSRQ+
    ''' AND A.RQ<='''+@JSRQ+
    ''' AND A.STATE&5=4')
      

  2.   

    你的 @YEAR @MONTH @KSRQ @JSRQ
    都是什么类型啊?
      

  3.   

    全部都是?那要用数据类型转换才行
    EXEC( 'INSERT INTO #MID SELECT MID FROM'+' SF'+cast(@YEAR as varchar)+cast(@MONTH as varchar)+' '+'A,'
    +'PP'+cast(@YEAR as varchar)+cast(@MONTH as varchar)+' '+'B'+
    ' '+'WHERE A.XLH=B.XLH AND B.FB=10 AND A.RQ>='+cast(@KSRQ as varchar)+
    ' '+'AND A.RQ<='+cast(@JSRQ as varchar)+
    ' '+'AND A.STATE&5=4')
      

  4.   

    EXEC( 'INSERT INTO #MID SELECT MID FROM'+' SF'+cast(@YEAR as varchar)+cast(@MONTH as varchar)+' '+'A,'
    +'PP'+cast(@YEAR as varchar)+cast(@MONTH as varchar)+' '+'B'+
    ' '+'WHERE A.XLH=B.XLH AND B.FB=10 AND A.RQ>='+
    //cast(@KSRQ as varchar)//
    +
    ' '+'AND A.RQ<='+
    //cast(@JSRQ as varchar)//
    +
    ' '+'AND A.STATE&5=4')
    我查了一下,发现原来都从datetime转换为int型,我现改为varchar型,可以了。不过不能直接用cast在语句中转化,必须先将变量转换后再在语句中引用。谢谢!!
      

  5.   

    exec ('INSERT INTO #MID SELECT MID FROM  SF'+convert(varchar(8),@year,112)+' A, PP'+convert(varchar(8),@MONTH,112)+' B WHERE A.XLH=B.XLH AND B.FB=10 AND A.RQ>='''
    +convert( varchar(8),@KSRQ,112)+''' AND A.RQ<= '''+convert(varchar(8),@JSRQ,112)+''' AND A.STATE&5=4')--就是执行这句:
    INSERT INTO #MID SELECT MID FROM  SF20030601 A, PP20030601 B WHERE A.XLH=B.XLH AND B.FB=10 AND A.RQ>='20030601' AND A.RQ<= '20030601' AND A.STATE&5=4