TableDiff突然从dateTime字段生成NULL作为字符串

时间:2014-07-03 02:59:24

标签: sql-server sql-server-2008 sql-server-2005 batch-processing

这很可能与this question有关,总的来说,几乎可以肯定是导致问题的源数据库(SQL 2008r2)和目标数据库(SQL 2005)之间的数据库整理差异,正如超级有用的@Mike D。

虽然它可能有关系,但我认为这个问题值得发表。问题是,当这个表运行时,它会产生一个insert语句,它给出了'转换从字符串转换datetime时失败',因为insert语句出于某种原因看起来像这样:

VALUES (N'Null',0,N'A',N'Null',N'Null',0,N'Null',Null,    

N'Null'的价值观是个问题。当从SQL 2005转到SQL 2005时,这种情况不常发生。它只是在从SQL 2008r2更改为SQL 2005时才开始发生。有什么方法可以让tableDiff停止执行此N'Null'并开始执行此Null操作?如果删除单引号,查询将运行...

注意 - 源中这些有问题字段的dataType是dateTime,目标中的dataType也是dateTime。不管怎样,我的理解是这不应该发生?

1 个答案:

答案 0 :(得分:-1)

N'Null'和Null之间存在巨大差异。 N'Null'被视为字符串,而 NULL 表示无或未定义。因此,如果您在datetime字段中插入N'Null',那么它将抛出异常,因为它会尝试将此字符串转换为日期时间,并且这样做会一直失败,而在 NULL 的情况下只会不保存该列中的任何内容。如果您必须将列保持为空白,即您现在不想传递任何值,则插入 NULL