0

null を許可する datetime 列にクエリで null を挿入しようとしています。私のクエリはうまくいきます(私は思う)。ただし、null の代わりに 1900-01-01 00:00:00.000 を datetime 列に入れます。なぜこれが起こっているのですか?どうすれば修正できますか?

これをテストするために独自のテーブルを作成しましたが、ヌル化は問題ではありません。しかし、それは別のデータベースの問題です。他のデータベースと関係があるに違いないと思います。

4

3 に答える 3

2

INSERT クエリを使用して挿入する場合は、列名を指定したり、値を指定したりしないでください。これにより、フィールドに null が挿入されます。

たとえば、テーブルEntry_Date内の null 許容の datetime 列でabcある場合、insert ステートメントは次のようになります。

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

列に言及しないことで、列に null が含まれている必要があります。それが役に立てば幸い。

于 2013-10-28T18:22:48.660 に答える
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 に答える
1

挿入ステートメントが問題ない場合、唯一の理由は、挿入の値を変更するトリガーです。(SQL Server にバグがなければ。:-))

したがって、挿入するテーブルにトリガーがあるかどうか、およびそれらが何をするかを確認してください。

トリガーのリストを表示するには、テーブルがある DB の sys.triggers から選択するか、オブジェクト エクスプローラーの SQL Server Management Studio でテーブルに移動し、それを / トリガーを展開します。次に、各トリガーを確認できます。INSTEAD OF トリガーを確認する必要があります。ただし、INSTEAD OF トリガーがこれを引き起こさない場合は、AFTER トリガーも検討する必要があります。

もう 1 つのオプションは、insert ステートメントにバグがあり、列のデフォルトが 1900 になっていることです。その場合、目的の列に挿入してもよろしいですか? INSERT Table(List of columns) Values を使用していますか? 列の順序と値の順序は正しいですか?

于 2013-10-28T18:05:08.140 に答える