触发时间戳更新

时间:2014-08-07 16:17:33

标签: sql sql-server tsql dynamics-crm-2011

对于每个INSERT,如何使用当前日期时间填充我的DateStamp字段?

我为SSIS任务创建了一个错误输出表:

enter image description here

这是表格:

CREATE TABLE [dbo].[gbs_CRMErrorOutput](
    [ID] [uniqueidentifier] NULL,
    [ErrorCode] [nvarchar](50) NULL,
    [ErrorColumn] [nvarchar](500) NULL,
    [CrmErrorMessage] [nvarchar](max) NULL,
    [targetid] [uniqueidentifier] NULL,
    [subordinateid] [uniqueidentifier] NULL,
    [DateStamp] [datetime] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

请注意,表格中没有自动增量或任何键。

我也想知道这会是什么样的最佳做法?

2 个答案:

答案 0 :(得分:2)

以下是使用not null和默认值的示例。在您的真实表中,您可能想要命名默认约束。如果您像这样定义内联约束,它仍将被命名,但它将被自动分配。

CREATE TABLE #MyTable
(
MyID INT IDENTITY NOT NULL,
SomeValue VARCHAR(10),
DateCreated DATETIME NOT NULL DEFAULT GETDATE()
)

INSERT #MyTable(SomeValue)
VALUES ('Value1')

--This next line just waits for 1 second. 
--This will demonstrate multiple inserts at different times so you can the values change

WAITFOR DELAY '00:0:01'

INSERT #MyTable(SomeValue)
VALUES ('Value2')

SELECT *
FROM #MyTable

DROP TABLE #MyTable

答案 1 :(得分:1)

两个不错的选择:

1)在您的表上创建一个DEFAULT CONSTRAINT,并为您的列(good example here)指定GETDATE()。在SSIS中,不要将任何值映射到该列 - 将其保留为忽略。确保未选中Keep Nulls。请注意,您可能需要调整OLE DB目标的设置 - 如果出现问题,请取消选中“标识插入”。我还看到了列必须允许NULL的情况 - 这只会影响某些情况。

2)向数据流添加派生列转换,将其设置为向流中添加新列。我通常在这里使用System :: StartTime变量,因此在单个ETL运行期间插入的所有记录将共享相同的插入日期,但您可以轻松地使用SSIS函数GETDATE()。 SSIS Derived Column Transformation Editor

将刚刚创建的新列映射到OLE DB目标。

相关问题