私は以下のT-SQLで真のミステリーを持っています。それはそのままで、DATAP.Private=1
またはcast as int
のRight(CRS,1)
で動作します。つまり、DATAP.Private=1
のコメントを外した場合、エラーConversion failed when converting the varchar value 'M' to data type int
が表示され、そのキャストを削除するとクエリが再び機能します。キャストを適所に置くと、クエリはPrivate=1
なしでのみ動作します。私は私の人生のためPrivate
は、「M」、これまでですが、Private
がbit
フィールドでない限りPrivate=1
は、エラーが発生します、結果セットに何かを追加することができますどのように見ることができませんSQLキャストミステリー
!
SELECT
cast(Right(CRS,1) as int) AS Company
, cast(PerNr as int) AS PN
, Round(Sum(Cost),2) AS Total_Cost
FROM
DATAP
LEFT JOIN BU_Summary ON DATAP.BU=BU_Summary.BU
WHERE
DATAP.Extension Is Not Null
--And DATAP.Private=1
And Left(CRS,2)='SB'
And DATAP.PerNr Between '1' And '9A'
and Right(CRS,1) <> 'm'
GROUP BY
cast(Right(CRS,1) as int)
, cast(PerNr as int)
ORDER BY
cast(PerNr as int)
完全一致。 DATAP.Privateがビットフィールドの場合は、ほぼ確実にクラスタードインデックススキャンを生成し、サーバーがスキャンを実行する場合は、すべての変換を一度に適用してフィルタリングします。 – GSerg