2016-12-27 51 views
1

我必须更新表格上的记录ValidTimeStateFieldTypeUTCDateTime,但我只需要更新一个字符串字段。 如果我用这个代码:如何不更新ValidFrom - ValidTo表字段?

while select forUpdate MyTable 
{ 
    MyTable.StringField = "Test"; 
    MyTable_UPD.validTimeStateUpdateMode(ValidTimeStateUpdate::EffectiveBased); 

    ttsbegin; 
    MyTable.update(); 
    ttscommit; 
} 

命令后MyTable.update();更改表MyTable.ValidFrom或MyTable.ValidTo值。 我只需要更改StringField上的值,我不需要更改ValidFrom/To上的值。我想保留UTC字段的相同信息,但我不想创建新记录。

如果我使用MyTable.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction);,则会收到错误消息。

可以只更改值并且不要触摸ValueFrom/To字段上的任何内容?

谢谢,

享受!

+0

什么是你正在使用ValidTimeStateUpdate ::校正时得到的错误? – SShaheen

回答

2

如果我没有记错的话,不可能只修改您的StringField因为在你的指标您已经定义DateTime场。

您需要使用validTimeStateUpdateMode功能,在你的代码中使用MyTable然后MyTable.update()但你在MyTable_UPD没有MyTable使用validTimeStateUpdateMode(ValidTimeStateUpdate::EffectiveBased);

试试这个:

ttsbegin; 
while select forUpdate MyTable 
{ 
    MyTable.StringField = "Test"; 
    MyTable.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction); 
    MyTable.update(); 

} 
ttscommt; 
0

尝试使用有效时间状态范围在你的SELECT语句。

事情是这样的:

MyTable.validTimeStateUpdateMode(ValidTimeStateUpdate::Correction); 

ttsbegin; 
while select forUpdate validTimeState(1\1\1900, 31\12\2154) * from MyTable 
{ 
    MyTable.StringField = "Test"; 
    MyTable.update(); 
} 
ttscommit; 

我用的例子,从这个MSDN页面的帮助:https://msdn.microsoft.com/en-us/library/gg843767.aspx