将记录插入带有GUID和其他几列的表中?

时间:2015-05-23 01:09:31

标签: sql-server ssis bids

我有一个包含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;

1 个答案:

答案 0 :(得分:0)

当您进行查询时,在数据源组件中,您拥有相同的查询有什么问题?它将为您创建一个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