我有一个学术场景,我想知道如何分析。
DECLARE @date DATETIME
SET @date = getDate()
SET @date = DATEADD(DAY, DATEDIFF(DAY, 0, @date-3), 3)这将把日期缩短到星期四。
我所被质疑的是有隐含类型的证据。
我认为这三个地方肯定发生了.
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是整数变量,那会有所不同吗?
是否有一种方法可以分析执行计划,或其他方法,以确定这是不需要的?
为了让事情更复杂,我现在不在现场。我在远程帮助一个同事。这意味着我不能直接访问SSMS,等等。
发布于 2012-08-16 14:58:36
用于查询
DECLARE @date DATETIME = getDate()
DECLARE @N INT = 3
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @date-3), 3)
FROM master..spt_values
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @date-@N), @N)
FROM master..spt_values查看执行计划,计算标量显示如下所示。
查询1
[Expr1003] = Scalar Operator(dateadd(day,datediff(day,'1900-01-01 00:00:00.000',[@date]-'1900-01-04 00:00:00.000'),'1900-01-04 00:00:00.000'))查询2
[Expr1003] = Scalar Operator(dateadd(day,datediff(day,'1900-01-01 00:00:00.000',[@date]-CONVERT_IMPLICIT(datetime,[@N],0)),CONVERT_IMPLICIT(datetime,[@N],0)))显示您的怀疑是正确的,它发生在文字值的编译时,但在运行时需要一个int变量的CONVERT_IMPLICIT。
https://stackoverflow.com/questions/11989854
复制相似问题