SSIS 不支持日期时间数据类型

问题描述 投票:0回答:1

我有一个 SSIS 包,我希望在包执行中的某个点存储日期时间戳,即该点的确切日期和时间,并将其存储在 SQL Server 表中

我在目标表中有一个日期时间列,包连接并可以写入表,因为我已经这样做了,日期时间戳现在是一个添加的列。我有一个带有 SQL 的“执行 SQL 任务”并已配置 - 图像显示正在使用的 SQL 任务和 SSIS 包变量

第二个“执行 SQL 任务”处理插入,我知道它之前可以工作,但现在由于插入了新的日期时间列而失败。错误是

错误:执行查询“INSERT INTO dbo.theTable (”失败,并出现以下错误:“参数绑定 1 上不支持的数据类型。”。可能的失败原因:查询出现问题、“ResultSet”属性设置不正确、参数不正确设置正确

第二个SQL任务中的数据类型我已经尝试了所有日期选项并将参数大小从21增加到23然后是27,但仍然失败。我已使用断点来检查 StoredStartTime 变量,它看起来正确,即 10/10/2023 14.35,尽管没有微秒。请问为什么会失败?

sql-server ssis
1个回答
0
投票

在等待详细信息时,我的解决方案是使用

DATE
数据类型作为 SQL Server RDBMS 的 OLE DB 连接管理器。是的,DATE,尽管它有时间成分。这是一个可怕的名字,令人震惊。

变量

两个变量,都设置为 2111 年,这样我们就可以验证运行时正在使用其他东西。

SQL 创建目标表

为 POC 创建表。

DROP TABLE IF EXISTS dbo.SO_77266997;
CREATE TABLE dbo.SO_77266997
(
    PackageName varchar(50) NOT NULL
,   ServerName varchar(50) NOT NULL
,   StartTime datetime2(7) NOT NULL
);

SQL 获取日期时间

运行查询以获取数据库的当前时间。将其存储到我们的

StoredStartTime
变量

SQL 存储日期时间

使用 OLE DB 参数化的沼泽标准插入语句(?作为占位符,基于 0 的编号)导致

StoredStartTime
存储到我们的表中

我的顺序位置与你的不同,但只要情况一致,你就会没事的。

SQL 检索存储的值

此查询只是拉回我们存储的值,以证明尽管数据类型为“DATE”,但我们没有截断时间部分。将值存储到我们的变量中

RetrievedStoredStartTime

SCR 回波

我最喜欢的小脚本,因为它将变量值弹出到输出日志中,我们可以在第一张图片中看到结果。

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;

namespace ST_0371ffe3d696471a9d92b91f6527ac90
{
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {
        public void Main()
        {
            bool fireAgain = false;
            foreach (var item in Dts.Variables)
            {
                Dts.Events.FireInformation(0, "SCR echo back", string.Format("{0}=>{1}", item.QualifiedName, item.Value), "", 0, ref fireAgain);
            }

            Dts.TaskResult = (int)ScriptResults.Success;
        }

        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.