如何在SQL Server 2005中使用SQL查询更改表中的列顺序?
我想使用SQL查询重新排列表中的列顺序.
我正在使用SQL Server 2008 R2,我希望在表中的列顺序中将新列添加到特定位置,而不是在末尾.我希望避免重新创建表格.如何在不重新创建表的情况下执行此操作?
即
Table: Bob
==========
Col1
Col2
Run Code Online (Sandbox Code Playgroud)
添加新列.
Table: Bob
==========
Col1
NewCol
Col2
Run Code Online (Sandbox Code Playgroud) 我试图用脚本改变SQL服务器中的表.在过去,我总是通过GUI完成这种事情,但现在我需要生成一个脚本来为客户完成.
我有一个SQL Server数据库表,如下所示:
MyTable ------- ColA int NOT NULL ColB int NOT NULL ColC int NOT NULL ColD VARCHAR(100)
主键在ColA,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)
主键现在由ColA,ColB,ColX和ColC定义.
这很容易通过SQL Server GUI完成.但是当我从中生成一个脚本时,它似乎不必要地复杂.基本上,脚本使用新模式创建临时表,将旧表中的所有数据,索引和约束复制到临时表中,删除旧表,然后将新表重命名为旧表的名称.另外,它有这样的行:
ALTER TABLE dbo.Tmp_MyTable ADD CONSTRAINT
MyTable21792984_ColC_DF DEFAULT ((0)) FOR ColC
Run Code Online (Sandbox Code Playgroud)
我担心这些随机数字(即21792984)在所有客户数据库实例上都不一样.它们看起来像SQL服务器在创建对每个实例唯一的数据库时生成的内容.
是否有更直接的方法通过SQL命令更改表?我在网上看过,但我发现的主要是基本的和/或通用的.
更新:根据我收到的答案,看起来困难在于将新列"置于"两列之间.我已经意识到列的顺序并不重要(如果我错了,请随意留下纠正我的答案).在我的例子中,如果我只是将列添加到表的末尾,则更改会更简单,代码中的任何内容都不依赖于特定的列顺序.
我正在更改现有表以添加身份列。我能做到,没问题。
但我想确保将来查看它的人会看到它添加了标识列,所以我真的想将其设置为第 1 列。我知道这对系统的运行完全无关紧要;它仅供人类阅读。
有谁知道有什么方法可以做到这一点?我查看了 Alter Table 和 column_definition 的 TSQL 语法,但没有看到任何内容;但我希望有人知道一种方法来实现这一点。
FWIW,这是一项一次性操作(但在许多服务器上,因此需要自动化),所以我不担心任何“技巧”将来是否会消失——只要它现在有效。我们正在使用最新版本的 SQL Server Express。
感谢您的任何建议。
美好的一天,
当我们向表中添加一列时,它会被添加到表的末尾.但是,我真的需要在表的开头添加一列.原因是我们有脚本将数据从平面文件源导入到表中,并且我们将列开头的列更容易.
谢谢!
sql server 2005