2

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

现在我有列顺序

Emp_id, Emp_Name, Address, phoneNo.

我想在 Emp_Name 附近添加“性别”。

Emp_id, Emp_Name, Gender, Address, phoneNo). 

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

4

3 回答 3

1

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

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

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

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

DROP TABLE my_table

毕竟将新表重命名为旧表上的名称。

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

于 2013-07-24T12:17:56.453 回答
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 更改为您的实际表名。

扬尼斯

于 2013-07-24T12:28:02.417 回答
0

你可以做到,但有什么用呢?

SQLFiddle 演示

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;
于 2013-07-24T12:32:20.690 回答