【问题标题】:Can I add an Identity column while importing using SSIS?我可以在使用 SSIS 导入时添加标识列吗?
【发布时间】:2013-11-19 19:34:44
【问题描述】:

我是 SSIS 的新手,正在尝试安排一些文本文件的自动导入。使用大量测试数据示例正确解释所有列。但是,我的数据没有可用作主键的标识列。我希望在导入发生时添加一个作为身份的列。这可能吗?先谢谢了。

【问题讨论】:

  • 几点。首先(希望我不会在这里分心),身份列根据定义是由数据库实现和管理的。您可能可以根据数据构建某种代理键,但这会带来其自身的问题。

标签: sql ssis bids


【解决方案1】:

我通过提前使用标识列和文本文件中的剩余字段创建数据库表来做到这一点。然后,在 SSIS 包中将所有文本文件数据字段映射到相应的数据库字段。将数据插入其余字段时,数据库将处理标识字段。

CREATE TABLE table_name
(
   Id [int] IDENTITY(1,1) NOT NULL,
   column_name2, -- From text file field 1
   ...
   column_name3 data_type(size), -- text file field n
);

希望对您有所帮助。

【讨论】:

  • 我也有同样的想法,但我只添加了身份列,而不是所有列。我的数据结构没有改变,所以这对我来说非常有用!谢谢!
【解决方案2】:

如果 e 的目标表中有标识列。 G。作为数据流中的 OLE 目标,SSIS 通过从插入中省略列来很好地处理这一点,这是数据库引擎想要管理此列本身所需要的,即。为插入的每条记录生成新编号。

如果您的意思是对所有导入的记录进行编号 e. G。按行号从 1 开始,SSIS 中没有直接支持这一点的数据流组件。但是您可以轻松地在数据流中使用脚本组件,该组件会添加一个列,例如 row_no,然后使用以下代码(假设为 C#)作为语言设置:

int rowNo;

public override void PreExecute()
{
    base.PreExecute();
    rowNo = 0;
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    Row.rowno = ++rowNo;
}

【讨论】:

    猜你喜欢
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 2011-01-02
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多