1

SQL サーバー 2008 r2

インデックス付きビューを作成しようとしていますが、次のエラーが発生します

ビューは文字列から datetime または smalldatetime への暗黙的な変換を使用するため、ビュー '' にインデックスを作成できません。確定的なスタイル値で明示的な CONVERT を使用します。

問題は、「1970-01-01 00:00:00」からの秒数を記録する INT 列 [GPSTime] にあり、これを DATETIME に変換/キャストしようとしています。

CAST(DATEADD(SS,[GPSTime],'1970-01-01' ) AS DATETIME)

また

CONVERT(VARCHAR,DATEADD(SS,[GPSTime],'1970-01-01' ),113)

また

CONVERT(DATETIME,DATEADD(SS,[GPSTime],'1970-01-01' ),113)

上記の 3 つのオプションのそれぞれで、前述のエラーが発生します。

これは回避策ですか?

4

2 に答える 2

1

問題が実際に にあると推測するには、次のこと'1970-01-01'を試してください。

Dateadd(ss, gpsTime, convert(datetime, '1970-01-01', 101))

または、datetime 値を別のテーブルに (変換を避けるために datetime として) 保持するか、決定論的関数を記述して datetime を返すこともできます。

create function [dbo].[UnixEpoch]
()
returns datetime
with schemabinding
as
begin
    RETURN convert(datetime, '1970-01-01', 101)
end

go

select objectproperty(object_id('[dbo].[UnixEpoch]'), 'IsDeterministic')

SELECT dbo.unixEpoch()

編集:

に適用される日時スタイルに注意してくださいconvert(datetime, '1970-01-01', 101)

http://msdn.microsoft.com/en-us/library/ms178091.aspxのドキュメントによると:

ソースまたはターゲットの型が datetime または smalldatetime であり、もう一方のソースまたはターゲットの型が文字列であり、非決定論的スタイルが指定されている。決定論的であるためには、スタイル パラメーターは定数でなければなりません。さらに、スタイル 20 と 21 を除き、100 以下のスタイルは非決定論的です。スタイル 106、107、109、および 113 を除き、100 を超えるスタイルは決定論的です。

于 2014-11-19T15:28:28.363 に答える
0

同じエラーが発生し、変換だけでなく修正しました:

CONVERT(DATETIME, firstdate, 102) AS firstdate

SELECT 句だけでなく、WHERE 句でも次のようになります。

WHERE  firstdate >= CONVERT(DATETIME,'20150101',102)

このソリューションがお役に立てば幸いです。

于 2020-10-22T03:23:40.917 に答える