2013-07-24 57 views
2

我想在第二個位置插入現有表中的新列。在sql表中添加新列

現在我有列的次序一樣

Emp_id, Emp_Name, Address, phoneNo. 

我想在不久的EMP_NAME加上「性別」。

Emp_id, Emp_Name, Gender, Address, phoneNo). 

我無法刪除此表並創建新表。

+0

http://blog.sqlauthority.com/2008/04/08/sql-server-change-order-of-column-in-database-tables/ – stuartd

+3

你爲什麼要將其添加到該特定位置? –

+0

只是我舉了個例子。我想在另一個表中實現。我們需要遵循統一的所有表格。 – user2354274

回答

1

如果不創建新表,則無法以編程方式執行此操作。

,如果你被允許然後創建和刪除表: 創建一個新表:

CREATE TABLE new_table_name 
(
column_name1 data_type(size), 
column_name2 data_type(size), 
... 
); 

移動從主表到新的數據,然後刪除舊錶。

DROP TABLE my_table 

畢竟重命名新表的名稱是你的舊刪除表。

--alternative: 如果可能,您可以重新排列宿主應用程序中的列!

0

嗨,你可以嘗試以下方法:

BEGIN TRANSACTION 
SET QUOTED_IDENTIFIER ON 
SET ARITHABORT ON 
SET NUMERIC_ROUNDABORT OFF 
SET CONCAT_NULL_YIELDS_NULL ON 
SET ANSI_NULLS ON 
SET ANSI_PADDING ON 
SET ANSI_WARNINGS ON 
COMMIT 
BEGIN TRANSACTION 
GO 
CREATE TABLE dbo.Tmp_TableName 
    (
    Emp_id INT NOT NULL, 
    Emp_Name VARCHAR(100) NULL, 
    Gender BIT NULL, 
    [Address] VARCHAR(100) NULL, 
    phoneNo int NULL 
    ) ON [PRIMARY] 
GO 
IF EXISTS(SELECT * FROM dbo.Tmp_TableName) 
    EXEC('INSERT INTO dbo.Tmp_TableName (Emp_id, Emp_Name, [Address],phoneNo) 
     SELECT Emp_id, Emp_Name, [Address],phoneNo FROM dbo.TableName WITH  (HOLDLOCK TABLOCKX)') 
GO 
DROP TABLE dbo.TableName 
GO 
EXECUTE sp_rename N'dbo.Tmp_TableName', N'TableName', 'OBJECT' 
GO 
COMMIT 

確保表名更改爲實際的表名。

Giannis

0

你可以做到但是爲了什麼?

SQLFiddle demo

Alter table T ADD Gender varchar(10); 

Alter table T ADD Address2 varchar(100),phoneNo2 varchar(100); 
update T set Address2=Address,PhoneNo2=PhoneNo; 
Alter table T DROP COLUMN Address,PhoneNo; 

Alter table T ADD Address varchar(100),phoneNo varchar(100); 
update T set Address=Address2,PhoneNo=PhoneNo2; 
Alter table T DROP COLUMN Address2,PhoneNo2;