SQL Server 使用SSIS 2015中的表中的变量值进行动态查询

ie3xauqp  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(156)

我有一个只有一行的表A:

CODE    |    DATE
202211  |    2022-11

此表将在每个月底自动更新(例如:下个月将改为2022 - 12和2022-12)
我想使用'CODE'和'DATE'使查询成为动态查询,并在SSIS中使用变数和执行SQL工作。我的原始查询如下所示:

SELECT * FROM X
WHERE PERIOD = '202211', EXPDATE > '2022-11'

我想让它在表A改变的时候,我不需要改变查询。这是我已经尝试过的:

DECLARE @Period varchar(50)
DECLARE @Expdate varchar(50)
SET @Period = ?
SET @Expdate = ?
SELECT * FROM X
WHERE PERIOD = @Period, EXPDATE > @Expdate

当我尝试使用'?'运行时,正如文档中所说的那样,它不起作用,但当我将'?'改为硬代码时,它会运行,所以我很确定至少我的查询起作用了。是我遗漏了什么,还是我将变量设置错了。
这是我的变量设置

Name     |  Scope  |  Data type  |  Value  |  Expression
position |  MyDtsx |  String     |         |
date     |  MyDtsx |  String     |         |

这是我的SQL任务设置

General
__________________________
Result Set = Single Row
SQLSourceType = Direct Input
SQLStatement = 'SELECT CODE as position, DATE as date FROM A'

Result Set
__________________________
Result Name  |  Variable Name
position     |  User::position
date         |  User::date
lf5gs5x2

lf5gs5x21#

语法 无效

SELECT * 
FROM X
WHERE PERIOD = @Period, EXPDATE > @Expdate

中 的 每 一 个
做 那个

SELECT * 
FROM X
WHERE PERIOD = @Period AND EXPDATE > @Expdate

格式
但是 , 如果 表 A ( Period 和 ExpDate 的 源 ) 与 表 X 位于 同一 数据 库 中 , 则 跳过 无关 的 执行 SQL 任务 和 变量 , 只 进行 查询

SELECT X.* 
FROM X 
WHERE EXISTS (SELECT * 
              FROM A 
              WHERE X.PERIOD = A.Code AND  X.EXPDATE > P.[Date]);

格式
注解 指出
表 A 和 表 X 来自 不同 的 数据 库 。 遗憾 的 是 , 查询 实际 上 是 好 的 , 因为 当 我 把 它 改为 '@Period = ' 2022-11'' 和 '@Expdate = ' 2022 - 11'' 时 , 它 就 运行 了 。
一 个 有效 的 回购 协议 。
我 的 工作 笔记 , 为 那些 跟随 在 家里 , 因为 名称 的 变化 搞 砸 了 我 几 次 。

  • 表 A 的 代码 = SSIS 变量 位置 = 表 X 的 期间
  • 表 A 的 日期 = SSIS 变量 日期 = 表 X 的 失效 日期

# # SQL 安装 程序

执行 sql 任务 以 确保 我 有 数据

drop table if exists dbo.so_74394641;
create table dbo.so_74394641
(
Col1 bigint, Period varchar(50), ExpDate varchar(50)
);

insert into dbo.so_74394641
SELECT row_number() over (order by (SELECT NULL)) AS col1, '202211', '2022-12'
FROM sys.all_objects;

格式

# # SQL 获取 值

执行 sql 任务 。 硬 编码 , 因为 我 不 想 在 不同 的 数据 库 中 创建 另 一 个 表

SELECT '202211' AS Code, '2022-11' AS [Date];

格式

# # DFT 获取 数据

数据 流 . OLE DB Source 组件 使用 以下 查询

DECLARE @Period varchar(50)
DECLARE @Expdate varchar(50)
SET @Period = ?
SET @Expdate = ?
SELECT * FROM dbo.SO_74394641 AS X
WHERE PERIOD = @Period  and EXPDATE > @Expdate;

格式
Map 的 参数

  • 0 用户 : : 剂量 输入
  • 1 用户 : : 日期 输入

控制 流程

数据 流

相关问题