2011-06-01 19 views
11

Tablo oluşturmada IDENTITY NOT NULL talimatının gereksiz olup olmadığını bana söyleyebilir misiniz? Yani,KİMLİK Tablo Oluşturulmasında NULL DEĞİL

VARSAYILAN veya NULL iletilerinde açık kimlik değerlerine izin verilmez.

IDENTITY olarak bildirilen herhangi bir sütunun da örtülü olarak NOT NULL olarak bildirildiğini söyleyebilirim, ancak emin olmak isterim. Herkes onaylayabilir mi?

Çok teşekkür ederim.

+0

üretir

CREATE TABLE Foo1 ( FooId int identity not null ,Data varchar(20) not null ) 

eserler "bir şey ima edilirse, açıkça 'gereksiz' deklare edilir?" Cevap öznel olarak görünecektir. 'PRIMARY KEY' gereksiz olan bir sütun üzerinde 'NULL' DEĞİL 'beyan mı? "NO ACTION" referans işlemi her zaman gereksizdir, neden hiç mevcut değildir? – onedaywhen

cevap

8

SQL Server bir tablo oluştururken otomatik olarak satışlardaki o

Şimdi Management Studio tablonun komut dosyası oluşturur Aşağıdaki tabloda komut dosyası

create table test(id int identity(1,1), name varchar(1000)) 

düşünün bunu speficy vermedi kimlik sütunlara NULL kısıtlamasını DEĞİL ekler . Bu BOŞ kısıt eklendiği varsayılan tablo komut dosyasında belirtilmemiş DEĞİL

CREATE TABLE [dbo].[test](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [name] [varchar](1000) NULL 
) ON [PRIMARY] 

Satışlardaki olarak komut dosyası oluşturur. Kimlik sütunu asla NULL olmayacaktır. Bu nedenle NULL kısıtlaması eklenir. Varsayılan

+1

NULL veya NOT NULL belirtmezseniz, SQL bir kimlik sütunu NULL DEĞİL olarak ayarlar. Ben, ben her zaman, SET ANSI_NULL_DFLT_OFF ve SET ANSI_NULL_DFLT_ON komutlarının varlığı için endemik karışıklık önlemek için, bunu belirtmek istiyorum. –

1

SQL Server (2008 ve muhtemelen daha eski sürümler de) bir NULL sütununda bir kimlik sütunu oluşturmanıza izin vermez. Deneyin:

CREATE TABLE Foo2 
(
    FooId int identity null 
    ,Data varchar(20) not null 
) 

hata mesajı soru gibi görünüyor Could not create IDENTITY attribute on nullable column 'FooId', table 'Foo2'.

+0

Nihayetinde cevabınız, NULL DEĞİL türünün ima edildiği anlamına gelir. :) –

+1

Evet, daha sonra, @ Pranay'ın gönderisine yorum ekledikten sonra farkettim. Genel kodlama işlemim her zaman "örtük kod" kullanmaktan kaçınmaktır. Asla, SQL'in ** yapması gerektiğini düşündüğünüz şeyi yapması gerektiğini varsayın, aksine bilgisayara verdiğiniz talimatlarda net olmak için fazladan çaba harcamanızı (“null değil” yazarak) alın. –

İlgili konular