Usleep () в C реализован как ожидание занятости

CONVERT([varchar](4),@Year,(0))+'-01-01' передается на вызов DATEDIFF в позиции, где ожидается ожидаемая дата, что приводит к неявному преобразованию.

Из правил для детерминированных функций :

CAST

Определяется, если не используется с datetime, smalldatetime или sql_variant.

CONVERT

Определительно, если не существует одно из этих условий:

...

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

blockquote>

вы не вызываете никого, но вы полагаетесь на неявное преобразование, которое я ожидаю, как CAST. Вместо того, чтобы полагаться на это, я бы переключился на использование CONVERT и дал детерминированный параметр стиля.

Итак, я сделал бы: CONVERT(datetime,CONVERT([varchar](4),@Year,(0))+'0101',112) на своем месте. Сделав это, сама функция становится детерминированной

13
задан Jens Gustedt 16 November 2011 в 19:11
поделиться