好的,您可以在这里采用 2 种方法,我认为最简单的一种是将其放入写入变量的脚本任务中。第二种是将 SQL 代码嵌入到 SQL 脚本中,并将结果提取到结果集中。如果您将其用作另一个数据流的输入,则第二个可能值得探索,但我将专注于第一个,因为它更容易(至少对我而言)。就这样吧。
方法一:
第 1 步)从 2 个变量开始,两个变量都是 DateTime 类型。我命名了我的 User::varLastFriday 和 User::var4FriAgo,但你可以随意命名它们。请记住,与大多数 SQL 和 Visual Studio 不同,它们区分大小写!
步骤 2) 创建一个“脚本任务”。请注意,有许多类似的任务,这是描述为“执行标准集成服务任务未提供的功能。...”的任务。
第 3 步)编辑您的脚本,将“语言”设置为 Microsoft Visual Basic(使用我的示例,如果您更舒服,您可以在 C 中做同样的事情)无论您的编辑器是什么年份,我正在使用2015 年,但这在其他版本中应该是相似的,至少 2008 年是相同的。
第 4 步)仍然在脚本属性中,下拉“读/写变量”并检查两个变量,如果未在此处选择它们,则无法更新它们。
步骤 5) 仍然在脚本属性中,单击“编辑脚本”按钮,它将打开一个带有骨架项目的 Visual Studio 窗口。您将在“Main”过程中修改代码。这是代码。请注意,Main 的声明和返回值应该已经存在,您只是在“自定义代码的开始/结束”cmets 之间插入我所拥有的内容
Public Sub Main()
'Start of my custom code
Dim nDayOfWeek As Integer = DatePart(DateInterval.Weekday, Now)
Dim nOffset As Integer = 0
If nDayOfWeek >= 6 Then
nOffset = 6 - nDayOfWeek
Else
nOffset = -1 - nDayOfWeek
End If
Dts.Variables("User::varLastFriday").Value = DateAdd(DateInterval.Day, nOffset, Now)
Dts.Variables("User::var4FriAgo").Value = DateAdd(DateInterval.Day, nOffset - 28, Now)
'End of my custom code
Dts.TaskResult = ScriptResults.Success
End Sub
步骤 6) 保存脚本,保存任务,并将任务连接到您的其他步骤,以便它首先运行。它很快,但你不想要竞争条件
就是这样,当您运行它时,它会将两个变量分别更新为上周五和 4 周前的周五的日期。
方法二:
该逻辑可以用 SQL 编写并放入“执行 SQL 任务”中,您可以在其中从结果集中获取结果。我很难让这种方法发挥作用,我通常可以摆弄到足以让它最终发挥作用,但如果你想走这条路,你最好从别人那里得到帮助。这是生成日期的代码,不过,它至少会给你一个开始。
--DECLARE @TestDate DATE = '2019-08-21'
DECLARE @TestDate DATE = GETDATE()
--08-23 is Friday, WEEKDAY 6, 25 is Sunday Weekday 1
--use GETDATE for today
DECLARE @LastFri DATE
-- >=6 means running on Friday returns today,
--use >6 if you want running on Friday to return last friday
SET @LastFri = DATEADD(day, IIF(DATEPART(WEEKDAY, @TestDate) >= 6
,6-DATEPART(WEEKDAY, @TestDate)
,-1-DATEPART(WEEKDAY, @TestDate)),@TestDate)
SELECT @TestDate as IfDayIs , @LastFri as ThenLastFriIs, DATEADD(day, -28, @LastFri ) as Fri4Ago
--Fridays in August: 30, 23, 16, 9, 2 July: 26, 19, 12