1

以下のコードを実行しようとすると、次のエラーが発生します。

TOP句の行数は整数でなければなりません。

@constCnt変数はSMALLINTとして宣言され、@ threshはDECIMAL(6,4)として宣言されます。実行するselect (floor((@constCnt*(1+@thresh))))と、小数点なしの整数値が返されます。

これを回避する方法はありますか?

    select top (@constCnt) * 
    into #temp
    from (
            select top (floor((@constCnt*(1+@thresh)))) pt.*,
                inLast = CASE WHEN lh.code IS NULL THEN 0 ELSE 1 END
            from #pretemp pt
            left join #last lh
            on lh.code = pt.code
            order by em desc ) a    
    order by inlast desc, emr desc, code
4

2 に答える 2

2

変数をキャストしてみてください:

select top (cast(@constCnt as int)) *
...
于 2012-07-10T19:40:52.193 に答える
0

これを行うには、別の変数を定義します。

declare @constCnt2 int = floor((@constCnt*(1+@thresh)))

そして、これをサブクエリで使用します。

select top (@constCnt) *
into #temp
from (select top (@constCnt2) pt.*,
             inLast = CASE WHEN lh.code IS NULL THEN 0 ELSE 1 END
      from #pretemp pt left join
           #last lh
           on lh.code = pt.code
      order by em desc
     ) a
order by inlast desc, emr desc, code
于 2012-07-10T19:43:40.810 に答える