首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSIS 2015中表中变量值的动态查询

SSIS 2015中表中变量值的动态查询
EN

Stack Overflow用户
提问于 2022-11-10 19:55:05
回答 1查看 32关注 0票数 0

我的表A只有一行:

代码语言:javascript
复制
CODE    |    DATE
202211  |    2022-11

这个表将在每个月底自动更新它(例如:下个月它将更改为202212和2022-12)。

我想使用‘代码’和‘日期’使我的查询动态,使用变量并在SSIS中执行SQL任务。我最初的查询如下:

代码语言:javascript
复制
SELECT * FROM X
WHERE PERIOD = '202211', EXPDATE > '2022-11'

我想要这样做,以便每当表A更改时,我也不必更改查询。我已经试过了:

代码语言:javascript
复制
DECLARE @Period varchar(50)
DECLARE @Expdate varchar(50)
SET @Period = ?
SET @Expdate = ?
SELECT * FROM X
WHERE PERIOD = @Period, EXPDATE > @Expdate

当我试着用'?‘跑正如文档所述,它不起作用,但当我更改“?”时,它就会运行。转换为硬代码,所以我非常肯定,至少我的查询可以工作。我是不是遗漏了什么,还是我把变量设置错了。

这是我的变量设置

代码语言:javascript
复制
Name     |  Scope  |  Data type  |  Value  |  Expression
position |  MyDtsx |  String     |         |
date     |  MyDtsx |  String     |         |

这是我的SQL任务设置

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2022-11-10 20:27:38

您的语法无效。

代码语言:javascript
复制
SELECT * 
FROM X
WHERE PERIOD = @Period, EXPDATE > @Expdate

把它做成

代码语言:javascript
复制
SELECT * 
FROM X
WHERE PERIOD = @Period AND EXPDATE > @Expdate

但是,如果表A (句点和ExpDate的来源)与表X位于同一个数据库中,则跳过无关的执行SQL和变量,只需进行查询。

代码语言:javascript
复制
SELECT X.* 
FROM X 
WHERE EXISTS (SELECT * 
              FROM A 
              WHERE X.PERIOD = A.Code AND  X.EXPDATE > P.[Date]);

注释显示

表A和表X来自不同的数据库。遗憾的是,这个查询实际上很好,因为当我将它更改为‘@句点=’202211‘和'@Expdate =’2022-11‘时,它将运行。

一个有效的回购。

我的工作笔记的那些跟随在家里,因为名称的变化,使我混乱了几次。

  • 表A的代码= SSIS可变位置=表X的周期
  • 表A的日期= SSIS可变日期=表X的ExpDate

SQL设置

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

代码语言:javascript
复制
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 Get值

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

代码语言:javascript
复制
SELECT '202211' AS Code, '2022-11' AS [Date];

DFT获取数据

一个数据流。使用以下查询的OLE源组件

代码语言:javascript
复制
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;

映射参数

  • 0用户::dosition
  • 1用户::date Input

控制流

数据流

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74394641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档