null を許可する datetime 列にクエリで null を挿入しようとしています。私のクエリはうまくいきます(私は思う)。ただし、null の代わりに 1900-01-01 00:00:00.000 を datetime 列に入れます。なぜこれが起こっているのですか?どうすれば修正できますか?
これをテストするために独自のテーブルを作成しましたが、ヌル化は問題ではありません。しかし、それは別のデータベースの問題です。他のデータベースと関係があるに違いないと思います。
null を許可する datetime 列にクエリで null を挿入しようとしています。私のクエリはうまくいきます(私は思う)。ただし、null の代わりに 1900-01-01 00:00:00.000 を datetime 列に入れます。なぜこれが起こっているのですか?どうすれば修正できますか?
これをテストするために独自のテーブルを作成しましたが、ヌル化は問題ではありません。しかし、それは別のデータベースの問題です。他のデータベースと関係があるに違いないと思います。
INSERT クエリを使用して挿入する場合は、列名を指定したり、値を指定したりしないでください。これにより、フィールドに null が挿入されます。
たとえば、テーブルEntry_Date
内の null 許容の datetime 列でabc
ある場合、insert ステートメントは次のようになります。
Insert into abc (Entry_Id, Entry_Value) values (1,1000);
列に言及しないことで、列に null が含まれている必要があります。それが役に立てば幸い。
データベース内のすべてのトリガーを表示するには、次のクエリを使用します。
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
挿入ステートメントが問題ない場合、唯一の理由は、挿入の値を変更するトリガーです。(SQL Server にバグがなければ。:-))
したがって、挿入するテーブルにトリガーがあるかどうか、およびそれらが何をするかを確認してください。
トリガーのリストを表示するには、テーブルがある DB の sys.triggers から選択するか、オブジェクト エクスプローラーの SQL Server Management Studio でテーブルに移動し、それを / トリガーを展開します。次に、各トリガーを確認できます。INSTEAD OF トリガーを確認する必要があります。ただし、INSTEAD OF トリガーがこれを引き起こさない場合は、AFTER トリガーも検討する必要があります。
もう 1 つのオプションは、insert ステートメントにバグがあり、列のデフォルトが 1900 になっていることです。その場合、目的の列に挿入してもよろしいですか? INSERT Table(List of columns) Values を使用していますか? 列の順序と値の順序は正しいですか?