我的表A只有一行:
CODE | DATE
202211 | 2022-11这个表将在每个月底自动更新它(例如:下个月它将更改为202212和2022-12)。
我想使用‘代码’和‘日期’使我的查询动态,使用变量并在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发布于 2022-11-10 20:27:38
您的语法无效。
SELECT *
FROM X
WHERE PERIOD = @Period, EXPDATE > @Expdate把它做成
SELECT *
FROM X
WHERE PERIOD = @Period AND EXPDATE > @Expdate但是,如果表A (句点和ExpDate的来源)与表X位于同一个数据库中,则跳过无关的执行SQL和变量,只需进行查询。
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‘时,它将运行。
一个有效的回购。
我的工作笔记的那些跟随在家里,因为名称的变化,使我混乱了几次。
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 Get值
执行sql任务。硬编码,因为我不想在不同的数据库中创建另一个表
SELECT '202211' AS Code, '2022-11' AS [Date];DFT获取数据
一个数据流。使用以下查询的OLE源组件
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;映射参数
控制流

数据流

https://stackoverflow.com/questions/74394641
复制相似问题