0

我正在尝试将带有查询的 null 插入到允许 null 的日期时间列中。我的查询工作正常(我认为)。但是它将 1900-01-01 00:00:00.000 而不是 null 放入日期时间列。为什么会发生这种情况,我该如何解决?

我创建了自己的表来测试这一点,并且归零不是问题。但是,这是另一个数据库中的问题。我认为它必须与其他数据库有关。

4

3 回答 3

2

使用 INSERT 查询插入时,不要指定列名,也不要给出任何值。那应该在字段中插入 null 。

例如,如果Entry_Date我在表中可以为空的日期时间列abc,那么我的插入语句将如下所示:

Insert into abc (Entry_Id, Entry_Value) values (1,1000);

通过不提及该列,它应该包含 null 。希望能帮助到你。

于 2013-10-28T18:22:48.660 回答
1

如果您的插入语句正常,那么唯一的原因将是更改插入值的触发器。(前提是您的 SQL Server 上没有错误。:-))

因此,请检查您要插入的表是否有触发器以及它们的作用。

要查看触发器列表,请从数据库中的 sys.triggers 中选择表在哪里,或者在对象资源管理器中的 SQL Server Management Studio 中选择表,然后展开它/触发器 - 然后您可以检查每个触发器。您需要检查 INSTEAD OF 触发器。但是,如果 INSTEAD OF 触发器不会导致这种情况,您可能还会查看 AFTER 触发器。

另一种选择是插入语句有错误,列默认为 1900。在这种情况下,您确定要插入到您想要的列中吗?您是否使用 INSERT Table(List of columns) 值以及列的顺序和值的顺序是否正确?

于 2013-10-28T18:05:08.140 回答
1

要查看数据库中的所有触发器,请使用以下查询:

select 
    t.name as [TableName], 
    tr.name as [TriggerName], 
    m.[definition]
from sys.triggers tr
join sys.sql_modules m on m.object_id = tr.object_id
join sys.tables t on t.object_id = tr.parent_id

要查看所有默认约束,请使用以下查询:

select 
    t.name as [TableName],  
    c.name as [ColumnName], 
    dc.[name] as [ConstraintName], 
    dc.[definition] 
from sys.tables t
join sys.columns c on c.object_id = t.object_id
join sys.objects do on do.object_id = c.default_object_id
join sys.default_constraints dc on dc.object_id= do.object_id
于 2013-10-28T18:55:26.520 回答