Execute SQL Task 参数和变量的映射

Execute SQL Task能够执行带参数的SQL查询语句或存储过程(SP),通过SSIS的变量(Variable)对参数赋值。对于不同的Connection Manager,在Task中需要使用不同的符号(Parameter marker)来标记一个参数,并且在Parameter Mapping中设置参数名字(Parameter Name)。

在Execute SQL Task Editor中,设置Parameter Mapping的界面如下:

  • Variable Name:变量的名字,变量的作用域分为UserSystem,使用 :: 来引用作用域中的变量
  • Direction:参数的方向,分为输入参数(Input),输出参数(Output)和返回值(Returnvalue)
  • Data Type:参数的Data Type,必须和变量(Variable)的数据类型相兼容
  • Parameter Name:参数名字,不同的Connection Manager,其值不同,对于OLEDB Connection Manager,使用0,1,2等数值表示第一个,第二个参数,第三个参数等。
  • Parameter Size:默认值是-1,表示让SSIS确定参数的长度。如果参数的数据类型是变长的(varchar或varbinary),必须设置参数的长度,为参数值分配足够长度的空间。

在Parameter Mapping中,Parameter Marker和Name受到Connection Type的影响,如下表:

Connection typeParameter markerParameter nameExample SQL command
ADO?Param1, Param2, …SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?
ADO.NET@<parameter name>@<parameter name>SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = @parmContactID
ODBC?1, 2, 3, …SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?
EXCEL and OLE DB?0, 1, 2, 3, …SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?

1,执行SQL查询语句

楼主在实际开发中,最常用的Connection Type是OLEDB,设置Task的ConnectionType为OLE DB,在SQLStatement属性中使用 ? 来标记一个参数,? 叫做参数标记(Parameter Marker)。

select ID,c1
from dbo.dt_test
where c1=?

使用SSIS 变量(Variable)为参数赋值,Parameter Name必须是0,1,2等数字

2,执行SP,设置参数的方向

使用Execute SQL Task执行SP时,参数映射的Direction属性使用Input,Output和Returnvalue 分别表示:输入参数,输出参数和SP的返回值

复制代码

declare @return_value int 
declare @output_var int 
declare @input_var int
set @input_var=1exec @return_value=dbo.usp_test @para1=@input_var, @para2= @output_var output;

复制代码

使用OLEDB Connection Manager,使用 ? 表示一个参数,如图

在Parameter Mapping Tab中设置参数映射:

  • 第一个参数是SP的返回值,Direction 选择 Returnvalue,Parameter Name 是 0;
  • 第二个参数是SP的输入参数,Direction 选择 Input,Parameter Name 是 1;
  • 第三个参数是SP的输出参数,Direction 选择 Output,Parameter Name 是 2;

 

3,设置参数的Data Type

楼主整理的参数的Data Type和TSQL 数据类型的映射关系

3.1,数值类型

  • BYTE:映射 SSIS 的 DBTYPE_UI1,映射 TSQL 的 TinyInt
  • SHORT:映射 SSIS 的 DBTYPE_I2, 映射 TSQL 的 smallint
  • LONG:映射 SSIS 的 DBType_I8,映射 TSQL 的 bigint
  • FLOAT: 映射 TSQL 的 float(24)
  • DOUBLE:映射 TSQL 的 float(53)
  • DECIMAL: 映射 TSQL 的 decimal

3.2,日期/时间类型

  • DATE:映射TSQL的DateTime2(7)

注意:如果SSIS 变量的Data Type是DateTime,那么参数的Data Type应使用 DATE,但是,数据类型为DateTime的变量,只保留到秒,毫秒位是0.

3.3,字符串类型

  • VARCHAR: 映射TSQL的varchar
  • NVARCHAR: 映射TSQL的nvarchar

4,在做增量更新时,发现导入的数据量少于源数据

楼主在调试SSIS Package时,使用ModifiedDate字段做增量更新,Package中使用Execute SQL Task获取数据源中DataUpdateTime字段的最大值,并将该值赋值给变量:User::MaxLastModifiedDate,Package运行成功,但是导入的数据量少于源数据;通过测试,发现DateTime类型的变量,其时间部分只保留到秒,而不会计算毫秒部分,导致导入的数据量少于源数据。

调试SSIS Package,下断点(breakpoint),打开Watch Tab,查看变量运行时的值:

这两个变量定义为DateTime类型,经过测试,如果变量定义成String类型,实际上是一样的,时间只会精确到秒:

然而,数据源中的DataUpdateTime使用的Datetime2(7),精度十分高:

发生这种问题的根源是 SSIS的数据类型和SQL Server的数据类型不是一一对应的,存在差异。为了避免这种问题,可以对MaxLastModifiedDate 变量加1s。

在使用OLEDB数据源导入数据时,使用如下的Where条件,就能把所有的数据都导入到DW中。

where DataUpdatedOn > ?    --MinLastModifiedDate
and DataUpdatedOn<=?        --MaxLastModifiedDate

注意:SSIS 变量的日期和时间类型只保留到秒,而数据库中的时间可以保留到毫秒位(1-7位毫秒数)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439487.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python学习】 - 手写数字识别 - python读入mnist数据集的多种方法

写在前面&#xff1a; 其实网上有很多读入mnist数据的代码&#xff0c;但是都是比较麻烦冗长的函数&#xff0c;本篇文章介绍几种不算很麻烦的&#xff0c;借用库函数读入数据的方法。 方法1&#xff1a; 方法2&#xff1a; 方法3&#xff1a;

Coursera自动驾驶课程第21讲:Dynamic Object Interactions

在第20讲《Coursera自动驾驶课程第20讲&#xff1a;Mission Planning in Driving Environments》 我们学习了任务规划中常用的三种图搜索算法&#xff1a;Breadth First Search、Dijkstra 和 A* 搜索。 在本讲中我们将讨论运动规划器中使用的方法&#xff0c;以处理动态物体和…

sql server 数据库忘记sa账户密码/ 无管理员账户解决办法

一、计算机超级管理员账户有数据库的管理员权限 用管理员账户登录数据库&#xff0c;直接修改sa账户密码即可。 二、数据库中没有管理员权限的账户 SQL Server 2005/2008提供了针对该情况的更好的灾难恢复方法&#xff0c;无需侵入master数据库&#xff0c;不会对master数据库…

机器学习编译第1讲:机器学习编译概述

MLC-机器学习编译-第一讲-机器学习编译概述课程主页&#xff1a;https://mlc.ai/summer22-zh/ 文章目录1.0 概述1.1 什么是机器学习编译1.2 为什么学习机器学习编译1.3 机器学习编译的关键要素1.3.1 备注&#xff1a;抽象和实现1.4 总结1.0 概述 机器学习应用程序已经无处不在…

【Python学习】 - Pandas学习 sort_value( ),sort_index( )排序函数的区别与使用

按索引对DataFrame或Series进行排序&#xff08;注意ascendingfalse的意思是按照降序排序&#xff0c;若不写参数则默认升序排序&#xff09; DataFrame的构造函数默认参数是(值&#xff0c;列名&#xff0c;行索引)&#xff0c;行索引不填则默认0,1,2,3这样&#xff1f; In …

powerdesign 缩写AK,PK,IX,CK,FK,DF,UQ

PK - Primary Key IX - Non-Unique Index AK - Unique Index (AX should have been AK (Alternate Key)) CK - Check Constraint DF - Default Constraint FK - Foreign Key UQ - Unique Constraint

重读经典:《The Craft of Research(1)》

跟读者建立联系【研究的艺术一】这一次李沐博士给大家精读的是一本关于论文写作的书籍。这本书总共包含四个大的章节&#xff0c;本期视频李沐博士介绍的是第一个章节&#xff1a;Research&#xff0c;Researchers&#xff0c;and Readers。 0. 前言 视频开头&#xff0c;李沐…

【PAT - 甲级1045】Favorite Color Stripe(30分)(dp,LIS类问题)

题干&#xff1a; Eva is trying to make her own color stripe out of a given one. She would like to keep only her favorite colors in her favorite order by cutting off those unwanted pieces and sewing the remaining parts together to form her favorite color s…

机器学习编译第2讲:张量程序抽象

02 张量程序抽象 【MLC-机器学习编译中文版】课程主页&#xff1a;https://mlc.ai/summer22-zh/ 文章目录2.1 元张量函数2.2 张量程序抽象2.2.1 张量程序抽象中的其它结构2.3 张量程序变换实践2.3.1 安装相关的包2.3.2 构造张量程序2.3.3 编译与运行2.3.4 张量程序变换2.3.5 通…

迁移TFS 2012服务至新的电脑硬件

迁移TFS 2012的时候碰到一些问题, 中文记录很少, 英文的记录也比较零散. 这里记录最直接和简单的方法. 环境: 1. 公司域环境, 所有TFS用户都是公司域帐户. 2. TFS从一台服务器转移至另一台服务器. 都加入了公司域. 机器名分别为PC1和PC2. 域内不能有同名的电脑。 准备两台…

【PAT - 甲级1005】Spell It Right (20分) (递归输出,水题)

题干&#xff1a; Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English. Input Specification: Each input file contains one test case. Each case occupies one line which contain…

详解自动驾驶仿真数据集 SHIFT:A Synthetic Driving Dataset for Continuous Multi-Task Domain Adaptation

SHIFT&#xff1a;A Synthetic Driving Dataset for Continuous Multi-Task Domain Adaptation本文介绍一个新的自动驾驶仿真数据集&#xff1a;SHIFT&#xff0c;论文收录于 CVPR2022。适应连续变化的环境是自动驾驶系统一直以来要面临的挑战。然而&#xff0c;目前现有的图像…

TFS下的源代码控制

以下主要描述了&#xff1a; TFS源代码控制系统的基本场景如何把一个项目添加到源代码管理中如何与服务器同步如何做Check-In如何做分支与合并什么是上架与下架 我们知道工作项是项目管理的基本元素&#xff0c;但是一个项目的成功&#xff0c;光有工作项还是不够的。工作项说…

【PAT - 甲级1004】Counting Leaves (30分) (dfs,递归)

题干&#xff1a; A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Specification: Each input file contains one test case. Each case starts with a line containing 0<N<100,…

地平线:面向规模化量产的智能驾驶系统和软件开发

导读 7月27日&#xff0c;地平线在智东西公开课开设的「地平线自动驾驶技术专场」第3讲顺利完结&#xff0c;地平线智能驾驶应用软件部负责人宋巍围绕 《面向规模化量产的智能驾驶系统和软件开发》这一主题进行了直播讲解。本次分享主要分为以下4个部分&#xff1a; 1、智能驾驶…

【转】TFS上分支和标签的用法

什么时候用分支: 例如为某个客户定制的专用版本,和主干的特性有很大差别.不具通用性的需求. 大的版本修改,例如2.0 到3.0 加了很多特性,但2.0 还有维护.改bug 什么时候用标签: 小版本的发布, 如2.1.1到2.1.2. 分支的优点: 清晰,容易操作,程序员只要get latest/checkin latest就…

【PAT - 甲级1034】Head of a Gang (30分)(并查集)

题干&#xff1a; One way that the police finds the head of a gang is to check peoples phone calls. If there is a phone call between A and B, we say that A and B is related. The weight of a relation is defined to be the total time length of all the phone c…

重读经典(CLIP上):《Learning Transferable Visual Models From Natural Language Supervision》

CLIP 论文逐段精读【论文精读】这一次朱毅博士给大家精读的论文是 CLIP&#xff0c;来自于 OpenAI&#xff0c;是图像文本多模态领域一个里程碑式的工作。 CLIP 的影响力可见一斑&#xff0c;如果按照沐神之前讲的如何判断一个工作的价值来说&#xff0c;CLIP 应该就是 1001001…

TFS准备(一)

一、TFS概念&#xff1a; TFS全称Team FoundationServer&#xff0c;是应用程序生命周期管理的服务端&#xff0c;功能包括如图功能&#xff1a;源代码管理&#xff0c;版本控制&#xff0c;团队开发协作&#xff0c;统一集成&#xff0c;测试管理等。 二、TFS安装要求&#…

【PAT - 甲级1094】The Largest Generation (25分)(dfs建树)

题干&#xff1a; A family hierarchy is usually presented by a pedigree tree where all the nodes on the same level belong to the same generation. Your task is to find the generation with the largest population. Input Specification: Each input file contai…