我已将列设置为int而不是null默认值1 ...但每当我保存记录时,它会将该记录的默认值设置为0.
我没有把它放在任何地方。我不知道我在哪里弄错了。
我调试了我的代码,当我传递新的实体对象时,它将not null的默认值设置为0.可能是LINQ的东西,但我不知道如何处理它。我不知道我想明确赋值。 谢谢!
答案 0 :(得分:0)
对于sql-server,您可以使用 SQL Server Profiler 来捕获您在数据库中运行的所有脚本。 这可能会向您显示一些细节
答案 1 :(得分:0)
尝试运行此查询,将'myTable'
和'myColumn'
值替换为实际的TABLE
和COLUMN
名称,然后查看返回的内容:
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
的最佳用途之一是调试这样的小东西 - 因为它可以让你看到传递到表中的值,而不必滚动浏览大量的探查器数据。您可以尝试这样的操作(再次,使用您的实际表名和列名转换myTable
和myColumn
值:
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)
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;