Seltsames Verhalten bei User-Defined Types und NOT NULL

08/11/2007 - 20:10 von Thomas Steinmaurer | Report spam
Hello,

ist das folgende Verhalten "as designed" bzw. bekannt oder ein Bug?

Ich habe einen User-Defined Type mit einem NOT NULL Constraint erstellt
und verwende diesen beim Anlegen einer neuen Tabelle

create type dbo.d_myint from int not null
go

create table dbo.t1 (
id int not null,
col1 dbo.d_myint,
constraint pk_t1 primary key clustered (
id
)
)
go

commit
go

Wie erwartet, kann die folgende Anweisung nicht ausgeführt werden:

insert into dbo.t1 (id, col1) values (1, null)
go



Rollback der Transaktion und dann füge ich ein neues Feld in die Tabelle
mit dem selben UDT ein.

alter table dbo.t1 add col2 dbo.d_myint
go

commit
go


Warum erlaubt mir MSSQL nun das Einfügen von NULL im Feld col2? Die
folgende Anweisung kann ausgeführt werden:

insert into dbo.t1 (id, col1, col2) values (2, 1, null)
go

commit
go


I'm verwende MSSQL 2005 (Express).


Danke,
Thomas
 

Lesen sie die antworten

#1 Ralf Dietrich
15/11/2007 - 11:24 | Warnen spam
Hello Thomas,

ist in meinen Augen "nur" ein halber bug (aber im Sinne von "ein bisschen
schwanger gibt es nicht" sollte allerdings eine Fehlermeldung ausgegeben
werden)
"When you create or alter a table with the CREATE TABLE or ALTER TABLE statements,
the database and session settings influence and possibly override the nullability
of the data type that is used in a column definition. We recommend that you
always explicitly define a column as NULL or NOT NULL for noncomputed columns
or, if you use a user-defined data type, that you allow the column to use
the default nullability of the data type."

Wenn eine neue Spalte hinzugefügt wird kannst Du keine Not Null-Spalten hinzufügen,
wenn schon Werte in der Tabelle stehen (leider tritt Dein Verhalten aber
auch auf, wenn die Tabelle noch leer ist)
Bei Deinem Szenario sollte die Engine IMHO einen Fehler werfen.

Poste bitte diesen Bug bei http://connect.microsoft.com/sqlserver
Poste bitte hier dann den Link zum Bug und ich und noch ein paar Kollegen
werden ihn als validiert kennzeichnen
Der Fehler tritt auf bei SQL 2000 SP 4, SQL 2005 und SQL 2008 CTP 5

Ralf

SQLServer - Usergroup für Newbies und Jedies auch in Deiner Nàhe:
http://www.sqlpass.de --> Regionalgruppen


Hello,

ist das folgende Verhalten "as designed" bzw. bekannt oder ein Bug?

Ich habe einen User-Defined Type mit einem NOT NULL Constraint
erstellt und verwende diesen beim Anlegen einer neuen Tabelle

create type dbo.d_myint from int not null
go
create table dbo.t1 (
id int not null,
col1 dbo.d_myint,
constraint pk_t1 primary key clustered (
id
)
)
go

commit
go
Wie erwartet, kann die folgende Anweisung nicht ausgeführt werden:

insert into dbo.t1 (id, col1) values (1, null)
go
Rollback der Transaktion und dann füge ich ein neues Feld in die
Tabelle mit dem selben UDT ein.

alter table dbo.t1 add col2 dbo.d_myint
go
commit
go
Warum erlaubt mir MSSQL nun das Einfügen von NULL im Feld col2? Die
folgende Anweisung kann ausgeführt werden:

insert into dbo.t1 (id, col1, col2) values (2, 1, null) go

commit
go
I'm verwende MSSQL 2005 (Express).

Danke,
Thomas

Ähnliche fragen