我在SQL查询中一直使用以下代码:
DECLARE @CurrentDate DateTime = Getdate()
然后我引用@CurrentDate而不是在同一查询中多次使用Getdate()函数。这很有用,因为在执行查询期间@CurrentDate的值不会更改。
但是,我已经开始将其中一些变量转换为SSRS设置的参数。这允许用户更改参数@CurrentDate,由于各种原因,该参数很有用。通常,默认值设置为“ = Now()”或包含Now()函数的某些表达式。
在什么阶段计算这些参数?如果我希望参数彼此一致,有没有一种“正确的”方法来计算它们?
我正在尝试确定当前日期是否应该有一个参数,然后在计算其他参数时引用它,或者是否会像使用Now()一样产生相同的不一致(或更糟糕的不一致)在每个参数的表达式中。
答案 0 :(得分:0)
这一切都取决于您所说的“一致”。以以下两个脚本为例:
--Method #1
UPDATE tracker.shipment SET delivery_date = GETDATE() WHERE delivery_id = 1;
WAITFOR DELAY '00:00:01';
UPDATE tracker.shipment SET delivery_date = GETDATE() WHERE delivery_id = 2;
--Method #2
DECLARE @current_date DATETIME = GETDATE();
UPDATE tracker.shipment SET delivery_date = @current_date WHERE delivery_id = 1;
WAITFOR DELAY '00:00:01';
UPDATE tracker.shipment SET delivery_date = @current_date WHERE delivery_id = 2;
这是一个伪脚本,用于更新跟踪系统以显示何时进行发送。我认为第一个版本更“一致”,因为它记录了实际进行更新的时间,而不是第一次输入存储过程后的任意日期/时间。
让我们假装有另一个系统不断检查添加了交货日期的交货项目,然后进行实际交货,或者在每次交货更新之前的代码立即执行一些操作来触发实际交货。在这种情况下,使用第二种方法的一致性会降低很多,因为这将记录实际交付之前过去一段时间内的交付。
据我所知,在用户单击“查看报告”按钮时,将评估SSRS发送的参数以确定报告服务器上的服务器时间。因此,每个具有Now()
的参数都将以相同的日期时间结束,但是如果您的服务器不完全同步,则SQL Server可能会略微偏离该日期。
这真的重要吗?好吧,这完全取决于您对通过日期/时间的看法。用户输入自定义日期/时间时,他们是输入日期还是完整的日期/时间?我想他们只输入一个日期,所以这会自动转换为具有00:00:00.00时间部分?
基本上,我需要更多的上下文信息才能对此给出更完整的答案。
答案 1 :(得分:0)
只需创建一个日期时间SSRS参数并将默认值设置为NOW()。然后它将假定所有内容,但用户可以选择其他日期。还要注意,SSRS使用DATETIME参数,但是对于我的很多报告,我实际上使用了一个字符串参数字段,该字段我通过CAST转换为DATE,以避免在用户无法使用的小时之间丢失数据:
WHERE CAST(StartDate AS DATE) > CAST(@StartDateParam AS DATE)