任何人都可以告訴我在創建表時指令IDENTITY NOT NULL
是否冗餘?我的意思是,通過消息判斷在創建表時IDENTITY NOT NULL
不允許DEFAULT或NULL作爲顯式標識值。
我想說任何聲明爲IDENTITY
的列都被隱含地聲明爲NOT NULL
,但我想確認一下。任何人都可以確認嗎?
非常感謝。
任何人都可以告訴我在創建表時指令IDENTITY NOT NULL
是否冗餘?我的意思是,通過消息判斷在創建表時IDENTITY NOT NULL
不允許DEFAULT或NULL作爲顯式標識值。
我想說任何聲明爲IDENTITY
的列都被隱含地聲明爲NOT NULL
,但我想確認一下。任何人都可以確認嗎?
非常感謝。
SQL服務器中不添加NULL約束標識列自動eventhough創建表時,他沒有speficy它
請看下錶腳本
create table test(id int identity(1,1), name varchar(1000))
現在生成表從Management Studio中的腳本。它生成腳本爲
CREATE TABLE [dbo].[test](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](1000) NULL
) ON [PRIMARY]
儘管在表格腳本中未指定NOT NULL約束,但它被添加。標識列永遠不會爲NULL。所以添加NOT NULL約束默認
如果您未指定NULL或NOT NULL,則SQL會將標識列設置爲NOT NULL。我,我總是指定它,以避免'SET ANSI_NULL_DFLT_OFF'和'SET ANSI_NULL_DFLT_ON'命令存在的混淆。 – 2011-06-01 15:03:54
SQL Server(2008,也可能是早期版本)不允許您在NULL列上創建標識列。試試看:
CREATE TABLE Foo1
(
FooId int identity not null
,Data varchar(20) not null
)
作品,其中
CREATE TABLE Foo2
(
FooId int identity null
,Data varchar(20) not null
)
產生錯誤信息Could not create IDENTITY attribute on nullable column 'FooId', table 'Foo2'.
最終你的答案意味着NOT NULL是暗含的。 :) – 2011-06-01 16:06:28
是的,後來,我在@Pranay的帖子中添加評論後意識到。我的整體編碼是總是避免使用「隱式代碼」。不要以爲SQL會做你認爲它應該做的事情,而是需要額外的努力(比如說,輸入「not null」)在你給計算機的方向上清楚。 – 2011-06-01 17:00:18
這個問題似乎是, 「如果事情是隱含的,明確宣佈這是多餘的?」答案似乎是主觀的。在包含'PRIMARY KEY'冗餘的列上聲明'NOT NULL'嗎?如果「不採取行動」的參考行動總是多餘的,爲什麼它存在? – onedaywhen 2011-06-01 13:17:42