在sql表中添加新列

时间:2013-07-24 12:08:08

标签: sql-server

我想在第二个位置的现有表中插入新列。

现在我有像

这样的列顺序
Emp_id, Emp_Name, Address, phoneNo.

我想在Emp_Name附近添加“Gender”。

Emp_id, Emp_Name, Gender, Address, phoneNo). 

我无法删除此表并创建新表。

3 个答案:

答案 0 :(得分:1)

如果不创建新表,则无法以编程方式执行此操作。

如果允许您创建和删除表格,那么: 创建一个新表:

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

将数据从主表移动到新表,然后删除旧表。

DROP TABLE my_table

毕竟将新表重命名为旧表已删除的表。

- 替代: 如果可能,您可以重新排序主机应用程序中的列!

答案 1 :(得分: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

确保将TableName更改为您的实际表名。

Giannis

答案 2 :(得分: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;