私は SQL を初めて使用するわけではありませんが、最近、 として定義された列を保持するテーブルを作成しましたTIME
。何らかの理由で、このフィールドに午前 12 時を少し下回る値を取得できません ( 23:59:99.999
)。私の簡略化された TSQL は以下のとおりです。
DECLARE @Time TIME = '23:59:99.99999'
UPDATE tblProjectSLA
SET colSLATime = @Time
WHERE SLAID IN ( 22, 24)
次のエラーが表示されます。
メッセージ 241、レベル 16、状態 1、行 1
文字列から日付や時刻を変換するときに、変換に失敗しました。
時間の値を可能な限り低い時間「解像度」に設定することができ、フィールドが正常に更新されました。
DECLARE @Time DATETIME = '23:59'
これは、クエリを実行したときに SQL mgr に表示される結果です。
colSLATime
23:59:00.0000000
また、文字列値を TIME にキャストしようとしました...同じエラー:
DECLARE @Time TIME = CAST('23:59:99.99999' AS TIME)
私が奇妙だと思うのは、テーブルが 16 の精度と 7 のスケールに対して定義されていることです。テーブルに保存されている値に近いものを使用できないでしょうか?
列 colSLATime の定義方法は次のとおりです... (sp_help コマンドを使用し、読みやすくするために転置します)
Column_name colSLATime
Type time
Computed no
Length 5
Prec 16
Scale 7
Nullable yes
TrimTrailingBlanks (n/a)
FixedLenNullInSource (n/a)
Collation NULL
誰かが TIME データ型を使用することの内外についての簡単な議論に私を向けることができれば. または、実行時に VARCHAR フィールドと CAST を破棄して使用する必要があります (そうではないと思います)。
time (Transact-SQL)
SQL Server 2008 R2
Range 00:00:00.0000000 through 23:59:59.9999999