server是什麼 將具有默認值的列添加到SQL Server中的現有表




15 Answers

ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO

包含DEFAULT會使用默認值填充現有行中的列,因此不會違反NOT NULL約束。

sql server教學

如何將具有默認值的列添加到SQL Server 2000 / SQL Server 2005中的現有表中?




ALTER TABLE <table name> 
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name> 
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO



請注意,要添加的列具有NOT NULL約束,但沒有DEFAULT約束(值)。 如果表中包含任何行,則ALTER TABLE語句將失敗。 解決方案是從新列中刪除NOT NULL約束,或為其提供DEFAULT約束。




使用:

-- Add a column with a default DateTime  
-- to capture when each record is added.

ALTER TABLE myTableName  
ADD RecordAddedDate smalldatetime NULL DEFAULT(GetDate())  
GO 



使用:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

參考: ALTER TABLE(Transact-SQL) (MSDN)




在SQL Server 2008-R2中,我進入設計模式 - 在測試數據庫中 - 使用設計器添加我的兩列並使用GUI進行設置,然後臭名昭著的右鍵單擊提供選項“ 生成更改腳本 ” !

Bang up彈出一個小窗口,您猜對了,正確格式化的保證工作更改腳本。 按下簡單按鈕。




要使用默認值將列添加到現有數據庫表,我們可以使用:

ALTER TABLE [dbo.table_name]
    ADD [Column_Name] BIT NOT NULL
Default ( 0 )

下面是使用默認值將列添加到現有數據庫表的另一種方法。

下面是一個更加徹底的SQL腳本,用於添加具有默認值的列,包括在添加列之前檢查列是否存在,還檢查約束並刪除它(如果有的話)。 這個腳本也命名約束,所以我們可以有一個很好的命名約定(我喜歡DF_),如果不是,SQL會給我們一個帶有隨機生成數字的名稱的約束; 所以能夠命名約束也很好。

-------------------------------------------------------------------------
-- Drop COLUMN
-- Name of Column: Column_EmployeeName
-- Name of Table: table_Emplyee
--------------------------------------------------------------------------
IF EXISTS (
            SELECT 1
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_NAME = 'table_Emplyee'
              AND COLUMN_NAME = 'Column_EmployeeName'
           )
    BEGIN

        IF EXISTS ( SELECT 1
                    FROM sys.default_constraints
                    WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]')
                      AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]')
                  )
            BEGIN
                ------  DROP Contraint

                ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]
            PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped'
            END
     --    -----   DROP Column   -----------------------------------------------------------------
        ALTER TABLE [dbo].table_Emplyee
            DROP COLUMN Column_EmployeeName
        PRINT 'Column Column_EmployeeName in images table was dropped'
    END

--------------------------------------------------------------------------
-- ADD  COLUMN Column_EmployeeName IN table_Emplyee table
--------------------------------------------------------------------------
IF NOT EXISTS (
                SELECT 1
                FROM INFORMATION_SCHEMA.COLUMNS
                WHERE TABLE_NAME = 'table_Emplyee'
                  AND COLUMN_NAME = 'Column_EmployeeName'
               )
    BEGIN
    ----- ADD Column & Contraint
        ALTER TABLE dbo.table_Emplyee
            ADD Column_EmployeeName BIT   NOT NULL
            CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]  DEFAULT (0)
        PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added'
        PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added'
     END

GO

這兩種方法是使用默認值將列添加到現有數據庫表。




例:

ALTER TABLE [Employees] ADD Seniority int not null default 0 GO



例:

ALTER TABLE tes 
ADD ssd  NUMBER   DEFAULT '0';



首先創建一個名為student的表:

CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)

添加一列:

ALTER TABLE STUDENT 
ADD STUDENT_NAME INT NOT NULL DEFAULT(0)

SELECT * 
FROM STUDENT

將創建該表,並使用默認值將列添加到現有表中。




IF NOT EXISTS (
    SELECT * FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME'
)
BEGIN
    ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default
END



向表中添加新列:

ALTER TABLE [table]
ADD Column1 Datatype

例如,

ALTER TABLE [test]
ADD ID Int

如果用戶想要使其自動遞增,則:

ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL



這可以通過以下代碼完成。

CREATE TABLE TestTable
    (FirstCol INT NOT NULL)
    GO
    ------------------------------
    -- Option 1
    ------------------------------
    -- Adding New Column
    ALTER TABLE TestTable
    ADD SecondCol INT
    GO
    -- Updating it with Default
    UPDATE TestTable
    SET SecondCol = 0
    GO
    -- Alter
    ALTER TABLE TestTable
    ALTER COLUMN SecondCol INT NOT NULL
    GO



好吧,我現在對我以前的答案進行了一些修改。 我注意到沒有提到的答案IF NOT EXISTS 。 所以我將提供一個新的解決方案,因為我遇到了一些改變表格的問題。

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
 IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO

這裡TaskSheet是特定的表名, IsBilledToClient是您要插入的新列, 1是默認值。 這意味著在新列中將是現有行的值,因此將在那裡自動設置一個。 但是,你可以像我使用BIT一樣按照你想要的方式進行更改,所以我輸入默認值1。

我建議上面的系統,因為我遇到了一個問題。 那麼問題是什麼? 問題是,如果表中的IsBilledToClient列確實存在,那麼如果只執行下面給出的代碼部分,則會在SQL Server“查詢”構建器中看到錯誤。 但如果它不存在那麼第一次執行時就不會有錯誤。

ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]



SQL Server + Alter表+添加列+默認值uniqueidentifier ...

ALTER TABLE [TABLENAME] ADD MyNewColumn INT not null default 0 GO



Related