2014-02-11 48 views
0

我有大量的數據存儲在SQL Server 2008.現在我想添加新的字段[Book_ID]default值1到現有的表,但它不工作。如何在SQL Server 2008中設置默認值?

code

CREATE TABLE [dbo].[Ayyat_Translation_Language_old_20131209] (
    [Ayat_Translation_Language_ID] INT   IDENTITY (1, 1) NOT NULL, 
    [Translation_Laanguage_ID]  INT   NULL, 
    [Juz_ID]      INT   NULL, 
    [Surah_ID]      INT   NOT NULL, 
    [Ayat_Description]    NVARCHAR (MAX) COLLATE Arabic_CI_AI_KS_WS NOT NULL, 
    [Ayat_No]      INT   NULL, 
    [Book_ID]      INT NULL DEFAULT 1, 
    PRIMARY KEY CLUSTERED ([Ayat_Translation_Language_ID] ASC), 
    CONSTRAINT [fkey2] FOREIGN KEY ([Translation_Laanguage_ID]) REFERENCES [dbo].[Translation_Language] ([TransLation_Language_ID]) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT [fkey1] FOREIGN KEY ([Surah_ID]) REFERENCES [dbo].[Surah] ([Surah_ID]) ON DELETE CASCADE ON UPDATE CASCADE, 
    CONSTRAINT [fkey0] FOREIGN KEY ([Juz_ID]) REFERENCES [dbo].[Juz] ([Juz_ID]) 
); 

新字段添加到表,但它包含Null。任何幫助!

+0

你如何嘗試在這裏添加默認值?你顯示的不是一個「添加字段」,而是一個「創建表」語句。什麼問題,因爲你的語法看起來很好。任何錯誤? – TomTom

+0

'[Book_ID] INT NULL DEFAULT 1,如果您需要默認值,則從此行刪除NULL。 – Iqbal

+0

如果該列可以爲空,則空值將是用於現有行的值 – Zzyrk

回答

1

此行爲取決於您插入數據的方式。如果您明確地將NULL插入到列中,它將採用NULL,而不是默認值。如果您希望它採用默認設置(或者,您還可以使用關鍵字DEFAULTas a placeholder),則在插入過程中完全省略Book_ID列。

例如這將仍然插入NULL:

INSERT INTO [dbo].[Ayyat_Translation_Language_old_20131209] 
(
    [Ayat_Translation_Language_ID], , 
    [Translation_Laanguage_ID]  , 
    [Juz_ID]      , 
    [Surah_ID]      , 
    [Ayat_Description]    , 
    [Ayat_No]      , 
    [Book_ID]      
) 
VALUES (1, 2, 3, 4, 'Foo', 5, NULL); 

而這將採用默認:

INSERT INTO [dbo].[Ayyat_Translation_Language_old_20131209] 
(
    [Ayat_Translation_Language_ID], , 
    [Translation_Laanguage_ID]  , 
    [Juz_ID]      , 
    [Surah_ID]      , 
    [Ayat_Description]    , 
    [Ayat_No] 
    -- BOOK_ID is omitted, or use DEFAULT 
) 
VALUES (1, 2, 3, 4, 'Foo', 5); 
+0

+1 - 很可能是原因。 – TomTom

0

你現在需要改變表Book_ID

不接受NULL
ALTER TABLE [dbo].[Ayyat_Translation_Language_old_20131209] 
    ALTER COLUMN [Book_ID] INT NOT NULL DEFAULT 1 

如果給錯誤,您可能需要先更新現有記錄:

UPDATE [dbo].[Ayyat_Translation_Language_old_20131209] 
    SET [Book_ID] = 1 
相關問題