当列具有默认约束时,SQL Server 2012获取列不能为空。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当列具有默认约束时,SQL Server 2012获取列不能为空。相关的知识,希望对你有一定的参考价值。
考虑以下架构......
create table dbo.dg_world_records(
WorldRecordId int not null identity(1,1)
, GameTypeId int not null
, PlayerId int not null
, NumberOfValues int not null
, TotalTime int not null
, DateOfRecord datetime not null
, GameId int not null
, UTCInserted datetime not null
, UTCUpdated datetime not null
, SrvName varchar(30) not null
)
go
alter table dg_world_records add constraint dg_world_records_worldrecordid_pk primary key (worldrecordid)
go
alter table dg_world_records add constraint dg_world_records_utcinserted_df default getutcdate() for utcinserted
go
alter table dg_world_records add constraint dg_world_records_utcupdated_df default getutcdate() for utcupdated
go
alter table dg_world_records add constraint dg_world_records_srvname_df default @@servername for srvname
go
我正在定义非空列和最后三列(UTCInserted,UTCUpdated和SrvName)我正在创建默认约束。
我已经在我公司的开发服务器上做过很多次了,而且一切都运行良好。
但是,在我的本地SQL Server 2012实例上,以下insert语句引发错误。
insert into dbo.dg_world_records(gametypeid, playerid, numberofvalues, totaltime, dateofrecord, gameid)
values(11, 1, 365, 430000, getdate(), -1)
这是错误消息......
Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column 'SrvName', table 'dateguess.dbo.dg_world_records'; column does not allow nulls. INSERT fails.
The statement has been terminated.
我的猜测是SQL Server中有一个环境设置,允许您不为非空列指定默认约束的值。
谢谢,
答案
我想到了。
问题是以下声明......
@@servername
此语句返回null。
为了解决这个问题,我通过sp_addserver添加了本地服务器...
sp_addserver 'LT9LHJKV1SQLSERVERROCKS', local
然后我不得不重新启动SQL Server。
之后@@ servername返回一个值,我的insert语句有效。
以上是关于当列具有默认约束时,SQL Server 2012获取列不能为空。的主要内容,如果未能解决你的问题,请参考以下文章
1 - SQL Server 2008 之 使用SQL语句创建具有约束条件的表
当列是NTEXT时,SQL Server:IN('asd')不工作