是否有可能列在Microsoft SQL Server的?

特定的顺序位置添加到表

例如,我们的表始终CreatedOn,CreatedBy,LastModifiedOn,LastModifiedBy列在每个表定义的“终结”?我想新的列在SSMS露面这些列以上。

如果我在我的脚本所有数据库的变化,有没有办法保存在表的末尾这个命令?

通知你,我并不想提起。如果这甚至应该做的火焰战争。如果您想了解迅速退化成一个线程,这里是一个很好的一个:

http://www.developersdex.com/sql/message。 ASP?p值= 581&R = 5014513

有帮助吗?

解决方案

您必须创建,反映了原始表的模式一个临时表但列的顺序是你想要的,那么原来的内容复制到温度。删除原始和重命名的临时

这是什么SQL Management Studio中做幕后。

通过一个模式同步工具,可以自动生成这些脚本。

其他提示

进入SQL Server Management Studio中,和 “设计” 一个现有的表。在中间插入一列中,右键单击空白区域,然后选择生成更改脚本...

现在看它创建的脚本。它基本上会创建一个临时表与适当的列顺序,从原来的表中插入数据,删除原始表,然后重命名临时表。这可能是你需要做的事。

您可能还需要取消选中此选项将允许改变脚本的创建

答案是肯定的,这在技术上是可行的,但你将有一个头痛这样做,这将需要很长的时间来执行,并成立。

<强>一:创建/复制/删除/重命名

这其实就是SQL Server在图形界面做的:这里是它产生,当你点击添加新列的表开始后的“保存”按钮,执行脚本的例子。

/* 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
CREATE TABLE dbo.Tmp_SomeTable
    (
    MyNewColumn int NOT NULL,
    OriginalIntColumn int NULL,
    OriginalVarcharColumn varchar(100) NULL
    )  ON [PRIMARY]
     TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_SomeTable SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_SomeTable ON
GO
IF EXISTS(SELECT * FROM dbo.SomeTable)
     EXEC('INSERT INTO dbo.Tmp_SomeTable (OriginalIntColumn, OriginalVarcharColumn FROM dbo.SomeTable WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_SomeTable OFF
GO
DROP TABLE dbo.SomeTable
GO
EXECUTE sp_rename N'dbo.Tmp_SomeTable', N'SomeTable', 'OBJECT' 
GO

GO
COMMIT

<强>二:ADD COLUMN / UPDATE / DROP COLUMN / RENAME

这个方法基本上涉及创建要添加到您的新列的“正确”的任何现有列的副本,将数据转移到新列,然后丢弃原件和重命名新的。这将是一场浩劫与你有任何索引或约束,因为你必须重新指向他们。这在技术上是可行的,但再费时无论是在制定和执行方面。

CREATE TABLE MyTest (a int, b int, d int, e int)

INSERT INTO MyTest (a,b,d,e) VALUES(1,2,4,5)

SELECT * FROM MyTest -- your current table

ALTER TABLE MyTest ADD c int -- add a new column
ALTER TABLE MyTest ADD d_new int -- create copies of the existing columns you want to move
ALTER TABLE MyTest ADD e_new int

UPDATE MyTest SET d_new = d, e_new = e -- transfer data to the new columns

ALTER TABLE MyTest DROP COLUMN d -- remove the originals
ALTER TABLE MyTest DROP COLUMN e

EXEC SP_RENAME 'MyTest.d_new', 'd'; -- rename the new columns
EXEC SP_RENAME 'MyTest.e_new', 'e';

SELECT * FROM MyTest 

DROP TABLE MyTest -- clean up the sample

<强>三:住与它

这强烈地冒犯了我的秩序感......但有时,它只是不值得洗牌。

要我所知有改变列的排列顺序没有已知的方法。幕后SQL Management Studio中所做的何塞·巴西利奥说。如果你有一个大表,则是不切实际的更改列这样的订单方式。

可以使用一个“视图”。使用SQL视图,您可以使用您喜欢的任何顺序而不会受到表列的变化。

TFS 2013会为你做这个自动

新列(S)添加到您的表反正你喜欢,然后提交更改到TFS。从那里,你可以在Visual Studio中打开表的SQL文件和手动移动在T-SQL中列的顺序创建脚本。然后,你可以更新使用VS的架构目标数据库比较工具在工具发现> SQL服务器>新模式比较。选择与你的变化作为源,并且要更新为目标数据库的数据库项目。比较,选择表的脚本,并更新。 VS将下降并自动添加。您的所有数据都将是安全的,和索引了。

脏和简单。结果, 导出表到CSV。结果 在需要的位置插入新的数据。结果 跌幅榜。结果 与所需的列规格创建新表。结果 从CSV到新表装入列。

我认为是简单是添加列ALTER TABLE table1的ADD ..然后创建一个TMP表像从选择tmp_table1等 的 SELECT col1,col2,col5,col3,col4 into tmp_table1 from table1; 然后删除表1和重命名tmp_table1到Table 1,就是它了。我希望这会帮助别人

我不知道,如果线程仍然活跃。我在和MySQL数据库相同的查询。右键单击该表并选择“ALTER”自动生成下面的代码。从sakila的DB提供样品,它的工作。只要找到了之后,你要放置新列和使用“后”关键字列

ALTER TABLE `sakila`.`actor` 
CHANGE COLUMN `middle_name` `middle_name` VARCHAR(50) NULL DEFAULT NULL AFTER `first_name`; 

选择在临时表中的所有列,并创建你想要新列新表  删除旧表,选择所有从临时表中的列,并插入到新的与重新排序列。和没有数据丢失

select * FROM TEMP
select * from originaltbl
select * from #Stagintbl 



declare @ColumnName nvarchar(max);
set @ColumnName=(select
   distinct  
    stuff((
        select ',' + a.COLUMN_NAME
        from (select Column_name from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='originaltbl') a

        for xml path('')
    ),1,1,'') as ColumnName)

declare @Sqlquery nvarchar(max)
set @Sqlquery='select '+@ColumnName+' from  #Stagintbl'+'';
Insert into originaltbl
Execute(@Sqlquery)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top