Asp.net 如何在字段之间添加列或更改SQL中的现有列?
在SQL 2005/2008中,有人知道如何在特定字段之间或特定字段之后向表中添加列吗?另外,如何更改现有列上的位置 例如:Asp.net 如何在字段之间添加列或更改SQL中的现有列?,asp.net,sql,sql-server-2008,Asp.net,Sql,Sql Server 2008,在SQL 2005/2008中,有人知道如何在特定字段之间或特定字段之后向表中添加列吗?另外,如何更改现有列上的位置 例如: AHADRS, AHCITY, AHZIPC 我想在AHCITY和AHZIPC 这是我到目前为止尝试过的,但它们不起作用 ALTER TABLE AHASNF00 ADD AHZIPC varchar(max) AFTER AHCITY ALTER TABLE AHASNF00 ADD AHZIPC varchar(max) FIRST AHZIPC 感谢您的帮助。S
AHADRS, AHCITY, AHZIPC
我想在AHCITY
和AHZIPC
这是我到目前为止尝试过的,但它们不起作用
ALTER TABLE AHASNF00 ADD AHZIPC varchar(max) AFTER AHCITY
ALTER TABLE AHASNF00 ADD AHZIPC varchar(max) FIRST AHZIPC
感谢您的帮助。SqlServer在存储列时没有“位置”的概念
如果需要不同的列顺序,请更改
select
语句中的位置。通常可以通过使用临时名称创建一个临时表来解决此问题,该临时表的列顺序与您希望的列顺序相同。然后将数据从一个当前表复制到另一个表,然后销毁旧表,并将临时表重命名回原始表
当然,这一切都必须与删除和读取主键和外键引用相协调
例如,这是当我尝试在一个名为“Tern.I.”/P>的实际示例表中添加其他列中间的列时,SQLServer Management Studio生成的更改脚本。
不幸的是,我不相信有一种简单的方法可以用t-SQL实现这一点。您必须按照希望列的顺序创建一个新表,将旧表中的数据插入新表,删除旧表,重命名新表。同意。我不知道有任何RDBMS特别依赖于字段顺序——列是特别无序的,这是模型的基本原则之一。我正在为客户机创建一个仪表板应用程序,db表的逻辑位置取决于您是否希望以编程方式来做这件事,或者利用SSMS的功能来做这项工作你。但正如其他人所说,SQL server根本不关心列的顺序——如果希望它们以不同的顺序出现,请将SQL包装到视图中,或者只是更改SELECT语句中列的顺序。
/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/
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
ALTER TABLE dbo.Term
DROP CONSTRAINT FK_Term_TermUnit
GO
ALTER TABLE dbo.TermUnit SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_Term
(
Id int NOT NULL IDENTITY (1, 1),
Label varchar(50) NOT NULL,
TermUnitId int NOT NULL,
NewColumnInTheMiddle bit NULL,
UnitCount int NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_Term SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_Term ON
GO
IF EXISTS(SELECT * FROM dbo.Term)
EXEC('INSERT INTO dbo.Tmp_Term (Id, Label, TermUnitId, UnitCount)
SELECT Id, Label, TermUnitId, UnitCount FROM dbo.Term WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_Term OFF
GO
ALTER TABLE dbo.TreasuryIndexRate
DROP CONSTRAINT FK_TreasuryIndexRate_Term
GO
ALTER TABLE dbo.TreasuryIndexField
DROP CONSTRAINT FK_TreasuryIndexField_Term
GO
DROP TABLE dbo.Term
GO
EXECUTE sp_rename N'dbo.Tmp_Term', N'Term', 'OBJECT'
GO
ALTER TABLE dbo.Term ADD CONSTRAINT
PK_Term PRIMARY KEY CLUSTERED
(
Id
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE dbo.Term ADD CONSTRAINT
FK_Term_TermUnit FOREIGN KEY
(
TermUnitId
) REFERENCES dbo.TermUnit
(
Id
) ON UPDATE NO ACTION
ON DELETE NO ACTION
GO
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.TreasuryIndexField ADD CONSTRAINT
FK_TreasuryIndexField_Term FOREIGN KEY
(
TermId
) REFERENCES dbo.Term
(
Id
) ON UPDATE NO ACTION
ON DELETE NO ACTION
GO
ALTER TABLE dbo.TreasuryIndexField SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
BEGIN TRANSACTION
GO
ALTER TABLE dbo.TreasuryIndexRate ADD CONSTRAINT
FK_TreasuryIndexRate_Term FOREIGN KEY
(
TermId
) REFERENCES dbo.Term
(
Id
) ON UPDATE NO ACTION
ON DELETE NO ACTION
GO
ALTER TABLE dbo.TreasuryIndexRate SET (LOCK_ESCALATION = TABLE)
GO
COMMIT