私はcsvからデータを挿入するために使用するストアドプロシージャを持っています。データそのものは種類、テスト、日付、お金のいくつかを組み合わせたものです。私は、たとえフォーマットが間違っていても、このデータが保存されることを保証する必要があります。したがって、それらをすべてvarcharsに保存しています。その後、データが検証され、チェックオフされると、適切なデータ型を持つ別のテーブルに移動されます。SQL Server 2008では、varcharパラメータをデータ型のお金に変換できるかどうかを確認するにはどうすればよいですか?
最初のテーブルに挿入すると、注意が必要な場合にその行にフラグ(ビット列)を設定するチェックを行いたいと思います。たとえば、お金の番号に文字が入っている場合、その行にフラグを立てて、余分なerrormsgフィールドに列名を追加する必要があります。次に、そのフラグを使用して、インターフェース内のユーザーが編集する必要があるフィールドを見つけて強調表示することができます。
日付パラメータは簡単だと思われますが、IF ISDATE(@mydate) = '0'
を使用して、そのパラメータをvarcharからdatetimeに変換できるかどうかをテストできます。しかし、私はISMONEY()やそれと同等のものを見つけることができません。
誰かがvarcharの内容が合法的にお金に変換できるかどうかをテストするために何を呼び出すのか知っていますか?
EDIT: 私はまだそれをテストしていませんが、あなたはこのような機能を思い、何が
ちょうど上記のコードのテストが終了
CREATE FUNCTION CheckIsMoney
(
@chkCol varchar(512)
)
RETURNS bit
AS
BEGIN
-- Declare the return variable here
DECLARE @retVal bit
SET @chkCol = REPLACE(@chkCol, '$', '');
SET @chkCol = REPLACE(@chkCol, ',', '');
IF (ISNUMERIC(@chkCOl + 'e0') = '1')
SET @retVal = '1'
ELSE
SET @retVal = '0'
RETURN @retVal
END
GO
アップデートを?:、それは動作します!
お金はかなり奇妙なデータ型ですたとえあなたが通貨を扱っているとしても、通常はそれを使用することをお勧めします。私は通常、適切な精度を選択して小数点型を推薦します。 (お金は小数点第4位を持ち、計算の各中間段階で丸めを実行します) –
@Daimen_The_Unbeliever私は最終的な宛先列フィールドでそれに固執しています、私は恐れています。 – Patches