我有一个逗号分隔的文本文件,我使用 SSIS 包将其导入到 SQL Server 2008 中。作为包的一部分,我有一个派生列作为文本文件的一部分是结束日期。我遇到的问题是,如果文本文件没有结束日期00000000而不是真实日期,例如20130207. 在我的派生列编辑器中,我有以下表达式,它适用于不全为零的日期。
(DT_DATE)(SUBSTRING([Column 20],1,4) + "-" + SUBSTRING([Column 20],5,2) + "-" + SUBSTRING([Column 20],7,2))
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供有关如何最好地处理零的解决方案或帮助吗?
在 SQL Server Integration Services 中,有两种类型的查找:
它们之间有什么区别?
我有一个关于优化在 Oracle 和 SQL Server 之间传输 10 亿到 13 亿条记录(未来容量高达 20 亿条或更多记录)的好方法的问题。
*编辑*我忘了提到——这个过程需要每周运行一次,在 1 个周末的时间范围内。
目前我计划使用 ETL 包。我现在正在寻找 Talend 或 SSIS。
这里是数据设置。数据驻留在Oracle上,需要先采集再打包再传输。
目前我的流程是这样的: 1.) 一个存储过程提取所有数据并将其重新打包到一个 oracle 表中。2.) ETL 将扫描此表并将其移动到 SQL Server DB。3.) Oracle 和 SQL Server 上的表是相同的。
我正在寻找有关优化流程的一些想法。将插入优化到 SQLserver 的好方法是什么?
1.) 我想只是简单地将表放在 SQL Server 上,然后将表创建为 select * from oracle_table
2.) 重新设计存储过程,使其在 ETL 中运行(使我不必插入 oracle),然后直接插入 SQL Server -- 在使用 Talend 进行低容量测试时(我不能说 SSIS ) 我遇到了一些性能问题 - 重组过程需要更长的时间来提取数据,然后直接在 Oracle 上调用它。这是正常的,还是我搞砸了优化?
3.) 有没有更好的方法来进行我不知道的海量数据传输?
任何建议都会很棒。我认为链接服务器在这里是一种选择,但没有设置,而且我以前从未设置过。
任何要点/提示都会很棒,因为我对这整个事情还很陌生。
我正在关注此博客以将值写入 Web 服务。到目前为止,我已经成功地读取了我的数据集并将其存储在一个对象变量中,然后循环遍历它们以一个接一个地显示它。
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.Xml
Imports System.Data.OleDb
Public Class ScriptMain
Public Sub Main()
Dim oleDA As New OleDbDataAdapter
Dim dt As New DataTable
Dim col As DataColumn
Dim row As DataRow
Dim sMsg As String
oleDA.Fill(dt, Dts.Variables("dsVar").Value)
For Each row In dt.Rows
For Each col In dt.Columns
sMsg = sMsg & col.ColumnName & ": " & _
row(col.Ordinal).ToString & vbCrLf
Next
MsgBox(sMsg) //These 2 lines need to be changed
sMsg …Run Code Online (Sandbox Code Playgroud) 我目前有一个 SSIS 包,它在分支中有一个拆分,可以查看标志以查看要执行的内容。如果为真则继续执行任务 1A,如果为假则执行任务 1B。任务 1A 和 1B 都移至同一任务。当我运行整个程序包时,它会正确选择任务 1A 或 1B,但随后程序包说它已成功完成并且不会继续执行下一个任务。有什么我需要配置的,以便它执行流程的其余部分?请查看屏幕截图以查看实际流程。它不会运行“更新库存速度代码”容器及以下。
如果您有任何建议,请告诉我。
谢谢,
克雷格
我正在尝试按照指南在 SQL 2012 的 Developer 实例上创建 SSIS 目录,但收到以下错误:
===================================
An error occurred during Service Master Key decryption
Changed database context to 'SSISDB'. (.Net SqlClient Data Provider)
------------------------------
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.5058&EvtSrc=MSSQLServer&EvtID=33094&LinkId=20476
------------------------------
Server Name: .\SQL2012
Error Number: 33094
Severity: 16
State: 1
Line Number: 1
------------------------------
Program Location:
at Microsoft.SqlServer.Management.IntegrationServices.Catalog.CreateMasterKey(IntegrationServices store)
at Microsoft.SqlServer.Management.IntegrationServices.Catalog.Create(Boolean execSsisStartup)
at Microsoft.SqlServer.IntegrationServices.UITasks.CreateObjectController.CreateObject()
at Microsoft.SqlServer.IntegrationServices.UITasks.CreateObjectController.Perform(ITaskExecutionContext taskExecutionContext)
at Microsoft.SqlServer.Management.TaskForms.TaskExecutionManager.ExecuteTaskSequence(ISfcScriptCollector collector)
Run Code Online (Sandbox Code Playgroud)
我无法通过搜索或任何有关如何解决它的指导来解决它。
我无法查看错误,因为它在 Visual Studio 中切断了。有没有我错过的窗口?目前,我一直在记事本中复制和粘贴错误,以便我可以看到实际的错误消息。

我知道“参数映射”中有 3 种类型的参数 - 输入参数、输出参数和返回参数。我了解如何使用输入和输出参数。但是当我尝试将参数类型设置为“返回参数”时,它不起作用。下面是我的 SQL Server 存储过程。
ALTER Procedure [dbo].[spRandomReturn]
As
Begin
Return Convert(int, rand() * 10)
End
Run Code Online (Sandbox Code Playgroud)
在 SSIS 执行 SQL 任务中,我设置了
连接类型:OLE DB
参数映射:变量名:User::@random(我在SSIS中设置了一个User参数:随机INT32),方向:返回值,类型:数字,参数名称:@random
SQL语句:
Declare @r int = @random EXEC @r = spRandomReturn
Run Code Online (Sandbox Code Playgroud)
我在 SSIS 中创建了一个返回参数,但它不起作用并引发错误。
我试图将 getdate 转换为 YYYYMMDDHHmmss 格式的字符串,但运气不佳。我需要在 SSIS 中作为派生列执行此操作。
我试过使用 Datepart,但它不起作用。
Datepart("YYYY",(GETDATE())) & datepart("MM",MONTH(GETDATE())) & DATEPART("DD",(GETDATE())) & DATEPART("HH",(GETDATE()) & DATEPART("MM",(GETDATE())) & DATEPART("SS",(GETDATE()))
Run Code Online (Sandbox Code Playgroud)
任何线索我做错了什么?
我有一个源列 KEY2,我需要在 SSIS 的派生列转换中对它执行一些字符串操作。它的配置如下
KEY2
Replace 'KEY2'
(FINDSTRING(KEY,",",1) - 2) > 0 ?
SUBSTRING(KEY,FINDSTRING(KEY,",",1) + 2,LEN(KEY) - FINDSTRING(KEY,",",1) - 1) : ""
string [DT_STR]
1
1252 (ANSI - Latin I)
Run Code Online (Sandbox Code Playgroud)
长度是1。我需要把它改成100。我试过这个:
(DT_STR,100)(FINDSTRING(KEY,",",1) - 2) > 0 ?
Run Code Online (Sandbox Code Playgroud)
SUBSTRING(KEY,FINDSTRING(KEY,",",1) + 2,LEN(KEY) - FINDSTRING(KEY,",",1) - 1) : ""
但是,系统提示我解析错误。问题是什么?
更新
我遵循了 markTheLiars 的回答。表达式现在看起来像这样:
KEY2 Replace 'KEY2' (DT_STR,100,1252)((FINDSTRING(KEY,",",1) - 2) > 0 ?
SUBSTRING(KEY,FINDSTRING(KEY,",",1) + 2,LEN(KEY) - FINDSTRING(KEY,",",1) - 1) : "") string [DT_STR] 1 1252 (ANSI - Latin I)
Run Code Online (Sandbox Code Playgroud)
表达式编译并运行,但是我被提示相同的错误,因为即使有强制转换,长度也不会改变。
ssis ×10
sql-server ×2
.net ×1
c# ×1
etl ×1
optimization ×1
oracle ×1
return-value ×1
sql ×1
web-services ×1