2014-11-19 2 views
1

SQL Server 2008 R2TSQL Невозможно создать индекс на вид - вид использует неявное преобразование из строки в DATETIME

Я пытаюсь создать индексированную вид, однако я получаю следующую ошибку

Невозможно создать индекс в представлении '', потому что представление использует неявное преобразование из строки в datetime или smalldatetime. Используйте явный CONVERT с детерминированным значением стиля.

Проблема заключается в колонке INT [GPSTime], который регистрирует количество секунд от «1970-01-01 00:00:00», и я пытаюсь CONVERT/CAST это в 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) 

Каждый из три приведенных выше варианта дают мне ошибку, о которой я упоминал ранее.

Возможно ли это?

ответ

1

Going сделать предположение о том, что проблема на самом деле на '1970-01-01', попробуйте следующее:

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

Или вы могли бы сохранить значение даты и времени в другой таблице (как 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() 

EDIT:

примечание стиль даты и времени применительно к convert(datetime, '1970-01-01', 101)

согласно документации на http://msdn.microsoft.com/en-us/library/ms178091.aspx:

Источник или целевой тип DateTime или smalldatetime, другой источник или целевой тип представляет собой строку символов, а недетерминирован стиль указан. Чтобы быть детерминированным, параметр стиля должен быть константой . Кроме того, стили меньше или равны 100 являются недетерминирован, стилей 20 и 21. Стили больше чем 100 являются детерминированными, для стилей 106, 107, 109 и 113.

+0

Благодаря исключением, за исключением, но с этим изменением я 'm getting "В представлении содержится преобразование, которое является неточным или недетерминированным" –

+0

Изменение этого кода 'code' DATEADD (ss, GPSTime, CONVERT (DATETIME,' 1970-01-01 ', 113)) все еще не работает –

+0

как сохранить значение в виде datetime в отдельной таблице так, чтобы вам не приходилось делать преобразование в строку? или написать детерминированную функцию, которая возвращает это datetime? – Kritner

Смежные вопросы