まず、SQL Server 2005を使用しているため、可能性のあるコードを配置する必要があります。 BEGIN TRY.....END TRY BEGIN CATCH....END CATCH
に失敗します ブロック-T-SQLのブロックを試して/キャッチしてください!
第二に、すべての日付操作について、私は常に SQLServerで設定されている現在の日付形式に関係なく機能するISO-8601形式を使用してください。
ISO-8601形式はYYYYMMDD
です 日付のみ、またはYYYY-MM-DDTHH:MM:SS
時間のある日付の場合-コードを次のように記述します:
BEGIN TRY
SET @Source='07152009'
SET @Temp = RIGHT(@Source, 4) + -- YYYY
LEFT(@Source, 2) + -- MM
SUBSTRING(@Source, 3, 2) -- DD
IF ISDATE(@Temp)!=1
BEGIN
RAISERROR('ERROR, invalid date',16,1)
END
SET @Destination = CAST(@Temp AS DATETIME)
END TRY
BEGIN CATCH
-- handle error if something bombs out
END CATCH
設定されている特定の日付形式に依存しないでください!!コードを送ってください。スイスドイツ語のシステムで試してみます。「en-US」、つまり「mm / dd / yyyy」をやみくもに想定すると、コードが壊れることはほぼ間違いありません。そうではありません強い> この地球上のどこでも同じ設定。
残念ながら、SQL Serverは日付の処理がかなり弱いです。おそらく、SQL Server内でCLRアセンブリを使用して、.NETのはるかに豊富な日付処理機能を利用することが理にかなっている拡張ポイントかもしれません??
マーク
PS:私が知っていたISO-8601形式のようですYYYY-MM-DDはSQLServerで常に機能するとは限りません-BooksOnlineが説いているように見えます。代わりにYYYYMMDDまたはYYYY-MM-DDTHH:MM:SSを使用してください。
ありがとう、gbn!