【问题标题】:Insert records into a table with a GUID and several additional columns?将记录插入带有 GUID 和几个附加列的表中?
【发布时间】:2015-05-23 01:09:30
【问题描述】:

我有一个包含 4 个字段的准备表。记录准备好后,我使用下面的 sql 脚本将它们插入现有表中。它工作得很好,但是我想在 SSIS 中观看这个过​​程。这可能吗?

下面的所有字段都存在于目标表中,但只有括号中的 4 个在我的源表中。使用 TSQL,这非常容易。但我在 SSIS 中得到的最接近的是使用派生列和添加列,但它不会让我创建 GUID。还有一些我在 TSQL 中格式化的日期字段在此对话框中是不可能的。

use MyDatabase
insert into dbo.DestinationTable (FILEID,
FILENAME,
STATUS,
LIBRARY,
FILESIZE,
MAJREV,
MINREV,
IMPORTDATE,
IMPORTTIME,
[CATNUM],
[MATDESC],
[CATCLASS],
[DOCVER])

select NEWID()
[PartNumber],
'In',
'Projects',
0,
0.0,
0.0,
DATEPART(YYYY, GETDATE()),
DATEPART(HH, GETDATE()),
[Catalog #],
[Material Description],
[Catalog Class],
[Document Version]
from dbo.SourceTable;

【问题讨论】:

    标签: sql-server ssis bids


    【解决方案1】:

    当您进行查询时,在数据源组件中使用与您相同的查询有什么问题?它将为您创建一个 GUID。并确保它是数据类型 GUID,您执行派生列转换并使用以下表达式将任何字符串转换为 GUID

    (DT_GUID) ("{" + YourGuid + "}")
    

    如果您不喜欢使用源查询创建它的想法,您可以创建一个脚本组件(在您的数据流中),该组件将为每一行生成一个 GUID。脚本会是这样的

    using System;
    using System.Data;
    using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
    using Microsoft.SqlServer.Dts.Runtime.Wrapper;
    
    
        [Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
        public class ScriptMain : UserComponent
        {
            public override void Input0_ProcessInputRow(Input0Buffer Row)
            {
                // Create a Globally Unique Identifier with SSIS
                Row.Guid = System.Guid.NewGuid(); 
            }
        }
    

    查看此链接了解更多详情Create GUIDs in SSIS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多