我试图将查询中的null插入到允许为null的日期时间列中。我的查询工作正常(我认为)。但它将1900-01-01 00:00:00.000而不是null放入datetime列。为什么会发生这种情况?如何解决?
我创建了自己的表来测试这个并且归零不是问题。但是,这是另一个数据库中的问题。我认为它必须与其他数据库有关。
答案 0 :(得分:2)
使用INSERT查询插入时,不要指定列名,也不要给出任何值。那应该在字段中插入null。
例如,如果Entry_Date
是abc
表中我可以为空的日期时间列,那么我的插入语句就像:
Insert into abc (Entry_Id, Entry_Value) values (1,1000);
如果不提及该列,则该列应为null。希望它有所帮助。
答案 1 :(得分:1)
如果你的insert语句是O.K.,那么唯一的原因就是一个改变插入值的触发器。 (假设您的SQL Server上没有错误。:-))
因此,请检查您插入的表格是否有触发器以及它们的作用。
要查看触发器列表,请从DB中的sys.triggers中选择表格,或者在对象资源管理器中的SQL Server Management Studio中选择,然后展开它/触发器 - 然后您可以检查每个触发器。您需要检查INSTEAD OF触发器。但是如果INSTEAD OF触发器没有引起这种情况,你可能也会看看AFTER触发器。
另一个选项是insert语句有一个bug,列默认为1900.在这种情况下,你确定要插入你想要的列吗?您是否使用INSERT表(列列表)值和列的顺序以及值的顺序是否正确?
答案 2 :(得分: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