传递给SQL Server数据库的默认值不正确

时间:2017-03-01 05:14:34

标签: asp.net sql-server

我已将列设置为int而不是null默认值1 ...但每当我保存记录时,它会将该记录的默认值设置为0.

我没有把它放在任何地方。我不知道我在哪里弄错了。

我调试了我的代码,当我传递新的实体对象时,它将not null的默认值设置为0.可能是LINQ的东西,但我不知道如何处理它。我不知道我想明确赋值。 谢谢!

4 个答案:

答案 0 :(得分:0)

对于sql-server,您可以使用 SQL Server Profiler 来捕获您在数据库中运行的所有脚本。 这可能会向您显示一些细节

答案 1 :(得分:0)

尝试运行此查询,将'myTable''myColumn'值替换为实际的TABLECOLUMN名称,然后查看返回的内容:

SELECT
     OBJECT_NAME(C.object_id) AS [Table Name]
    ,C.Name AS [Column Name]
    ,DC.Name AS [Constraint Name]
    ,DC.Type_Desc AS [Constraint Type]
    ,DC.Definition AS [Default Value]
FROM sys.default_constraints DC
INNER JOIN sys.Columns C
    ON DC.parent_column_id = C.column_id
    AND DC.parent_object_id = C.object_id
WHERE OBJECT_NAME(DC.parent_object_id) = 'myTable'
AND COL_NAME(DC.parent_object_id,DC.parent_column_id) = 'myColumn'
;

应该返回这样的内容:

[Table Name]    [Column Name]   [Constraint Name]    [Constraint Type]     [Default Value]
-------------------------------------------------------------------------------------------
myTable         myColumn        DF_myTable_myColumn  DEFAULT_CONSTRAINT     ('0')

如果返回的[Default Value]确实是(1),则表示您已正确设置约束,此处还有其他内容。它可能是一个触发器,或者您已经忘记/不知道的其他一些自动DML,或者其他完全不同的东西。

我不是世界上使用TRIGGER的最大粉丝,但在这种情况下,它可能很方便。我发现TRIGGER的最佳用途之一是调试这样的小东西 - 因为它可以让你看到传递到表中的值,而不必滚动浏览大量的探查器数据。您可以尝试这样的操作(再次,使用您的实际表名和列名转换myTablemyColumn值:

CREATE TABLE Default_Check 
(
     Action_Time DATETIME NOT NULL DEFAULT GETDATE()
    ,Inserted_Value INT
);

CREATE TRIGGER Checking_Default ON myTable
AFTER INSERT, UPDATE
AS
BEGIN
    INSERT INTO Default_Check (Inserted_Value)
    SELECT I.myColumn
    FROM Inserted I
    ;
END
;

此触发器只会列出针对您的表执行更新/插入的日期/时间,以及插入的值。创建完成后,您可以运行单个INSERT语句,然后检查:

SELECT * FROM Default_Check;

如果您看到一行,则只对该表执行一次操作(插入/更新)。如果你看到两件事,你不期待发生的事情 - 你可以检查看看是什么。您还会在插入/更新0时看到此处。

完成后,请确保DROP触发器:

DROP TRIGGER Checking_Default;

一旦它变得无关紧要,你也会想DROP这张桌子:

DROP TABLE Default_Check;

如果所有这些仍然无法帮助您,请告诉我。

答案 2 :(得分:0)

  

在VB中使用

     

属性VariableName为整数? =没什么

并且

  

在C#中使用

     

<强> INT? value = 0;

     

if(value == 0)
  的 {
       value = null;
  的}

答案 3 :(得分:0)

&#13;
&#13;
Please check  My Example: 

create table emp ( ids int null, [DOJ] datetime NOT null)
 ALTER TABLE [dbo].[Emp] ADD CONSTRAINT DF_Emp_DOJ DEFAULT (GETDATE()) FOR [DOJ] 

 1--Not working for Default Values
 insert into emp
 select '1',''

2 ---working for Default Values
 insert into emp(ids) Values(13)

 select * From emp
&#13;
&#13;
&#13;