例如,如果我创建一个 dtsx 包来填写 Excel 工作表,但只有在有实际数据时才通过电子邮件发送出去?
在 SQL Server 代理 T-SQL 作业步骤之间传递状态的唯一方法是通过真实的(即非 #temp)表,该表可能只存在于 tempdb 数据库中。即使全局临时表 (##temp) 也不够,因为即使多个会话可以访问它,每个 T-SQL 作业步骤都在其自己的会话中运行,该会话在步骤开始时创建并在步骤结束时结束。步骤。要运行的第一个会话将创建 ##temp 表,但是当该步骤结束时,##temp 表将在第二步开始之前被销毁。
我建议在工作的第一步中在 tempdb 中创建一个表,如下所示:
USE tempdb;
IF OBJECT_ID(N'dbo.JobStepState', N'U') IS NOT NULL
DROP TABLE dbo.JobStepState;
CREATE TABLE dbo.JobStepState
(
VariableName varchar(25) NOT NULL
CONSTRAINT JobStepState_pk
PRIMARY KEY CLUSTERED
, VariableValue varchar(25) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
然后,在后续步骤中,您可以使用以下命令将变量插入到表中:
INSERT INTO tempdb.dbo.JobStepState (VariableName, VariableValue)
VALUES ('SomeVariableName', 'SomeValue');
Run Code Online (Sandbox Code Playgroud)
在后面的作业步骤中,您可以使用以下方式引用该值:
DECLARE @val varchar(25);
SET @val = (
SELECT jss.VariableValue
FROM tempdb.dbo.JobStepState jss
WHERE jss.VariableName = 'SomeVariableName'
);
IF @val = 'SomeValue'
PRINT N'Yes'
ELSE
PRINT N'No';
DROP TABLE dbo.JobStepState;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3190 次 |
最近记录: |