none
Функция DATEDIFF и поля типа date в SQL Server 2008 RRS feed

  • Общие обсуждения

  • Здравствуйте!
    Есть таблица с двумя столбцами типа date, назовем их StartDate  и EndDate. Создается вычисляемый столбец, в котором вычисляется разница в днях. Формула - (datediff(day,[StartDate],[EndDate])). При сохранении таблицы выдается следующее сообщение:

    "В процессе проверки перед сохранением обнаружены предупреждения, которые могут привести к ошибкам сохранения. Продолжить попытку сохранения?"

    имя_таблицы таблица
    - Ошибка при проверке формулы для столбца имя_столбца ."

    Если продолжить сохранение, все сохраняется, вычисляемый столбец работает. Если поменять тип данных StartDate  и EndDate на datetime или smalldatetime предупреждение  исчезает.
    Вопрос - это баг SQL Server, или с полями типа data как-то по другому работать надо?
    • Изменен тип I.Vorontsov 19 октября 2009 г. 13:43
    • Перемещено I.Vorontsov 1 декабря 2009 г. 8:41 (От:Сообщество SQLClub.ru)
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 0:11 MSDN Forums consolidation (От:SQL Server для разработчиков)
    19 октября 2009 г. 9:26

Все ответы

  • Возможно и баг, но обычно не бывает дыма без огня. Возможно у вас в таблице есть данные над которыми данная операция может выполниться некорректно. Тем более, что ф-ий DATEDIFF одинаково работает как с datetime так и с date - http://msdn.microsoft.com/ru-ru/library/ms189794.aspx. Попробуйте создать пустую таблицу с 2-мя полями date и вычислимым столбцом datediff, если ворнинга не будет, значит смотрите что может не нравиться сиквелу в данных таблицы.

    19 октября 2009 г. 10:45
  • На новой таблице то же самое. Прикольно, что дальше все работает. И запрос типа

    SELECT DATEDIFF(day, StartDate, EndDate)
    FROM имя_таблицы

    срабатывает без каких либо фокусов :)
    19 октября 2009 г. 11:06
  • Попробовал у себя, никаких ворнингов :) Приведите пожалуйста скрипт вашей таблицы.

    19 октября 2009 г. 12:08
  • а пишет какой нибудь код ошибки?
    19 октября 2009 г. 12:08
  • Скрипт вот он:

    /****** Object:  Table [dbo].[Table_1]    Script Date: 10/19/2009 15:11:02 ******/
    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    CREATE TABLE [dbo].[Table_1](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [StartDate] [date] NULL,
        [EndDate] [date] NULL,
        [Diff]  AS (datediff(day,[StartDate],[EndDate])),
     CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
    (
        [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    GO

    Кстати, при выполнении скрипта тоже все чисто. Только при редактировании таблицы через дизайнер :)
    19 октября 2009 г. 12:17
  • Хм, видимо баг студии. Причём русской (у меня английская, и всё ок). Если он у вас повторяется стабильно, то можете написать об этом на Microsoft Connect - https://connect.microsoft.com/.

    • Изменено Denis ReznikMVP 19 октября 2009 г. 12:54 неправильный урл
    19 октября 2009 г. 12:46