我想用脚本来改变SQL Server中的表。在过去,我总是通过GUI来完成这种事情,但现在我需要生成一个脚本来为客户做。使用脚本在SQL Server中的其他列之间插入列
我有一个SQL Server数据库表是这样的:
MyTable ------- ColA int NOT NULL ColB int NOT NULL ColC int NOT NULL ColD VARCHAR(100)
主键跨可乐,COLB和COLC定义。
我想要的SQL脚本来更改表所示:
MyTable ------- ColA int NOT NULL ColB int NOT NULL ColX int NOT NULL (new column, default 0 for existing data) ColC int NOT NULL ColD VARCHAR(100)
主键将目前由可乐,COLB,COLX和COLC定义。
这很容易通过SQL Server GUI来完成。但是当我从它那里生成一个脚本时,它似乎不必要的复杂。基本上,脚本使用新模式创建临时表,将旧表中的所有数据,索引和约束复制到临时表中,删除旧表,然后将新表重命名为旧表。此外,它有这样的台词:
ALTER TABLE dbo.Tmp_MyTable ADD CONSTRAINT
MyTable21792984_ColC_DF DEFAULT ((0)) FOR ColC
我担心的是,这些随机找数有(即21792984)将不会对所有的客户数据库实例相同。它们看起来像是SQL Server在创建数据库时生成的,每个实例都是唯一的。
是否有更简单的通过SQL命令更改表的方法?我看过网上,但我发现大多是基本的和/或通用的。
更新:从我收到的答案,它看起来像困难在于把新列“之间”两栏。我意识到,列的顺序并不重要(如果我错了,可以随时留下一个答案来纠正我)。在我的情况下,如果我只是将列添加到表的末尾,则更改更简单,代码中的任何内容都不依赖于特定的列顺序。
谢谢,经过进一步检查,列顺序并不重要(美学除外)。只有将列添加到最后才能使其变得更容易。 – Kip 2009-06-08 17:18:40
如果您确实希望更改订单,则可以使用SQL Compare中的强制列顺序来执行此操作。这需要完整的表格重建,所以如果您有大量数据可能需要时间。现有数据将由SQL Compare保存。 – 2010-06-12 10:32:25