2017-12-18 4 views
0

Betrachten Sie das folgende Schema ...SQL Server 2012-Spalte abrufen kann nicht null sein, wenn die Spalte eine Standardeinschränkung aufweist.

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 

ich definieren, nicht null-Spalten und für die letzten drei Spalten (UTCInserted, UTCUpdated, & srvname) Ich schaffe Standardeinschränkungen.

Ich habe dies viele Male auf dem Entwicklungsserver meines Unternehmens getan und alles funktioniert gut.

In meiner lokalen Instanz von SQL Server 2012 wirft die folgende INSERT-Anweisung jedoch einen Fehler.

insert into dbo.dg_world_records(gametypeid, playerid, numberofvalues, totaltime, dateofrecord, gameid) 
values(11, 1, 365, 430000, getdate(), -1) 

Hier ist die Fehlermeldung ...

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. 

Meine Vermutung ist, dass es eine Umgebungseinstellung in SQL Server ist, dass Sie nicht angeben, einen Wert für eine nicht null Spalte, in der eine Standard erlaubt Einschränkung ist definiert.

Danke,

+1

Sind Sie 100% sicher, dass Sie eine Einschränkung für die SrvName-Spalte haben? Dieser Code sollte gut funktionieren. –

+0

Haben Sie einen Auslöser auf dem Tisch? –

+0

Ich habe gerade den Code unseres SQL 2016 Dev-Servers ausgeführt und es hat funktioniert. Kein Trigger, da die Tabelle vor dem Ausführen meines Codes gelöscht wurde. – codingguy3000

Antwort

0

Ich fand es heraus.

Das Problem ist die folgende Aussage ...

@@servername 

Diese Aussage null zurückkehren.

Um dies zu beheben, hatte ich den lokalen Server über sp_addserver fügen ...

sp_addserver 'LT9LHJKV1\SQLSERVERROCKS', local 

Dann hatte ich SQL Server neu zu starten.

Danach gibt @@ Servername einen Wert und meine Insert-Anweisung funktioniert.

Verwandte Themen