① SSIS 怎么对数据源加 where 条件
OLE DB 源,可以使用变量脚本,脚本就是SQL 语句,也可以自定义脚本
② 如何在SSIS中设置表名变量
一、SSIS变量简介
SSIS(SQL Server Integration Services,SQL Server整合服务)变量分分为两种,一种是系统变量,一种用户定义的变量。系统变量包括有关包、容器、任务或事件处理程序的非常有用的信息。例如,在运行时,MachineName系统变量包含运行包含的计算机的名称,StartTime变量包开始运行的时间。系统变量是只读的。在SSIS中,用户变量是用户在开发的过程中根据需要申明的变量。用户变量可以使用在脚本中,在由优先约束、For循环容器、派生列转换和条件性拆分转换使用的表达式中,以及在更新属性值的属性表达式中。
在各种编程语言中申明的变量一般情况下都会有作用范围的,SSIS变量也不例外,SSIS变量也是有作用范围的。根据作用范围分类,变量分为包变量和组件变量。包变量在包任何一个组件中都可以调用,组件变量只能够在声明变量的组件中有效。在变量的窗口中可以看到变量的作用域。
可以看到i变量的作用域是整个Package1包,而myconfig变量作用域是数据流任务组件。
二、SSIS用户变量的声明、赋值、使用
1、申明变量
申明变量是非常简单、如果你要申明包变量,只要单击控制流选项卡,然后在包开发区域空白处单击右键选择变量命令,或者新建变量按钮就新建一个变量,输入名称,选择数据类型,赋初值就完成了。
如果要声明某数据流任务组件使用的变量,只要双击该数据流任务组件,在流控制控制选项卡空白的地方单击右键选择变量命名,在变量窗口中新建一个变量命令,在变量窗口中新建一个变量,这时变量的作用域就是你选择的流任务组件。
2、赋值
在实际开发中,除了在变量声明的时候给变量赋值外,还有两种方式,一种是通过执行SQL任务组件返回值的方式给变量赋值,一种是通过脚本组件来给变量赋值。
在执行SQL任务组件方法是先设置好组件的数据库连接属性,然后输入从数据库取数据的SQL语句,设置组件返回的结果集为单行。在结果集界面中单击“新建”,在结果集那一列输入你刚才SQL返回列的名称,在变量名称列选择你要赋值的变量
图中红色方框中的SQL语句非常简单,返回单行,结果是1。在图4中,将返回的result列的一行赋值给用户变量i。
利用脚本组件赋值变量比较简单,只需要设置脚本组件的ReadOnlyvariable或者ReadWriteVariable,将变量的名称设置他们的值(多个变量以逗号分割),它们的区别是前者在脚本组件只能够读,或者可以读写。然后在脚本组件中通过
Dts.Varables("变量名称").Value=值
3、变量的使用
变量在ssis中使用的地方很多,笔者介绍两个典型的应用。
(1) 执行 SQL 任务组件的参数
假定申明了一个日期类型变量StartDate,用户需要通过从某个表中选择在StartDate日期之前的数据,这个时候需要将StartDate作为参数传给执行 SQL 任务组件。在执行 SQL 任务组件输入SQL的地方输入如下命令语句:
SELECT * FROM TABLE_a WHERE 日期字段 < ?
然后在参数据映射界面新增映射,在变量名称列选择用户变量StartDate,选择类型为DATE,在参数名称列输入给参数取的名称。这样就可以将StartDate变量传给SQL任务组件的SQL语句了。
(2) 在脚本组件中赋值
可以在脚本组件中通过Dts.Variables("i").Value = 1方式赋值给变量,也可以通过这种方式来使用变量。比如Dts.Variables("other_variable").Value = Dts.Variables("i").Value+1,这个语句是可以在脚本组件中执行的,将i变量加1后赋值给另外一个变量。
③ sql server 2012 ssis 中同一个数据库,不同表结构之间的数据进行插入(中间表字段在目标表中都有)
insert into 目标表 ( 字段1,字段2......)
select 字段1,字段2
from 中间表
where ....
④ ssis中条件查询可不可以使用通配符例如sql中的like '%abc%'
用sql 正则,或者用模糊查找组件
⑤ SSIS 数据流,可以过滤重复的输入记录吗
两种情况:抄 一:有袭数据的添加时间createdate 1、取数据仓库中max(createdate) 2、取数据源中数据,条件createdate>max(createdate) 二、有自增列id 1、取数据仓库中max(id) 2、取数据源中数据,条件id>max(id) 如需更新,根据更新时间同样
⑥ 如何在SSIS中动态设置执行包任务的位置
------解决方案--------------------
源和目标都动态,貌似不行。。。-
SQL 中可以使用动态语句,不太确定SSIS是否可以用参数。
能动态绑定表名吗,列名不变,映射也不变
关于参数
SSIS 2012中参数主要分为项目参数和包参数。参数在包的运行过程中是只读的。正确的使用参数能大大提高我们开发和部署时的效率。
项目参数
项目参数是SSIS 2012中新加入的功能。项目参数可以在项目内所有的包中共享,一次配置,多处使用。因此在项目参数中,通常是设置一些比较通用的信息,比如数据库连接,服务器连接,或者其他的业务范畴的信息。
下图列出了在项目中常用的一些参数设置。
通过设定项目使用的数据库连接信息,就可以在项目的Connection manager中使用这些参数实现动态的连接。
包参数
包参数通常定义包执行时需要的一些数据,比如筛选文件的条件,文件采集的位置,功能的开关等等。这些参数定义在包级别,相当于一个程序的入口参数。
⑦ SSIS如何根据条件跳过某一步,直接运行下一步
不知道你说的那个任务是不是分离的,你可以使用右键那个任务,然后选择“禁用”,这样你运行整个包的时候就跳过某一步了
⑧ ssis 数据流源可以有哪些数据库
两种情况:
一:有数据的添加时间createdate
1、取数据仓库中max(createdate)
2、取数据源中数据,条件回createdate>max(createdate)
二、有自增列答id
1、取数据仓库中max(id)
2、取数据源中数据,条件id>max(id)
如需更新,根据更新时间同样
一般的增量抽取有以下四种情况
1、触发器 :对数据库性能的影响比较大。
2、时间戳:在表设计的时候,很多表没有设计时间戳,如果现在该业务表结构,那是相当的麻烦!要牵扯很多部门。
3、全表对比:效率就不敢恭维了。随着数据量的增加,。。。
4、日志对比:也是比较麻烦的。对于 mysql sqlserver 更麻烦!
⑨ 怎样将sql server中的一张表,通过ssis(sql server intergration services)根据条件导出成txt格式
在控制流里建立一个Data Flow Task
在数据流里建立一个OLEDB数据源,配置你的数据库,然后建立一个平面文件目的源。
如图:
⑩ sql Server数据库如何将一个库中的数据导入另一个库中
如果是一个实例下的不同数据库的话,跟操作同一个库时是一样的
只要在要操作的表前面添加数据库名相关信息就可以了
如:
select * into test1.dbo.to from test2.dbo.from
如果是不同实例的数据库之间的导入就比较麻烦了,
首先需开启Distributed Transaction Coordinator服务
然后给你个例子
--以下例子为MSDN上邹建大哥的例子,给你做下参考
/*--同步两个数据库的示例
有数据
srv1.库名..author有字段:id,name,phone,
srv2.库名..author有字段:id,name,telphone,adress
要求:
srv1.库名..author增加记录则srv1.库名..author记录增加
srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新
--*/
--大致的处理步骤
--1.在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,实现同步
exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql实例名或ip'
exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码'
go
--2.在 srv1 和 srv2 这两台电脑中,启动 msdtc(分布式事务处理服务),并且设置为自动启动
我的电脑--控制面板--管理工具--服务--右键 Distributed Transaction Coordinator--属性--启动--并将启动类型设置为自动启动
go
--然后创建一个作业定时调用上面的同步处理存储过程就行了
企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句: exec p_process
--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
--3.实现同步处理的方法2,定时同步
--在srv1中创建如下的同步处理存储过程
create proc p_process
as
--更新修改过的数据
update b set name=i.name,telphone=i.telphone
from srv2.库名.dbo.author b,author i
where b.id=i.id and
(b.name <> i.name or b.telphone <> i.telphone)
--插入新增的数据
insert srv2.库名.dbo.author(id,name,telphone)
select id,name,telphone from author i
where not exists(
select * from srv2.库名.dbo.author where id=i.id)
--删除已经删除的数据(如果需要的话)
delete b
from srv2.库名.dbo.author b
where not exists(
select * from author where id=b.id)
go
--