Анализ имплицитного CAST

У меня есть академический сценарий, который я хотел бы знать, как анализировать.

DECLARE @date DATETIME
SET     @date = getDate()
SET     @date = DATEADD(DAY, DATEDIFF(DAY, 0, @date-3), 3)

Это округлит дату до четверга.

То, что мне было предложено, так это доказательство того, где существуют неявные CAST.

Есть три места, где я предполагаю, что это должно происходить...

DATEADD(
  DAY,
  DATEDIFF(
    DAY,
    0,          -- Implicitly CAST to a DATETIME?
    @date-3     -- I presume the `3` is being implicitly cast to a DATETIME?
  ),
  3             -- Another implicit CAST to a DATETIME?
)

Однако, возможно, поскольку 0и 3являются константами, это делается во время компиляции в план выполнения?

Но если бы 3были переменными типа INT, было бы иначе?


Есть ли способ проанализировать план выполнения или какой-либо другой метод, чтобы иметь возможность определить это импирически?

Чтобы усложнить ситуацию, я сейчас не на сайте. Я пытаюсь удаленно помочь коллеге с этим. Это означает, что у меня нет прямого доступа к SSMS и т. д.

5
задан Charles 16 August 2012 в 16:12
поделиться