Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何在字段之间添加列或更改SQL中的现有列?_Asp.net_Sql_Sql Server 2008 - Fatal编程技术网

Asp.net 如何在字段之间添加列或更改SQL中的现有列?

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

在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

感谢您的帮助。

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