微软SQL Compact Edition重命名列

15

我在SQL Server Compact Edition中重命名列时遇到了问题。我知道可以使用 sp_rename 重命名表,但这对于列不起作用。

我已经搜索了替代方法,但没有找到。

我能够删除一列并在特定列之后添加一个新列吗?如果我删除该列并在指定的列之后添加它,则数据将丢失,对吗?

似乎一旦创建了表格,它就无法正确修改 - 这是 SQLCE 的另一个限制吗?

3个回答

16

看起来 SQL CE 确实不允许更改列名。

你的想法是对的,先创建一个新的列,然后再删除旧的列。

如果只是添加一个新列并删除旧列,那么数据会丢失,所以你需要发出更新语句将数据从旧列移动到新列。

类似于以下内容:

alter Table [dbo].[yourTable] add [newColumn] [DataType]

update yourTable set newColumn = oldColumn

alter Table [dbo].[yourTable] drop column [oldColumn]

应该创建您的新列,将数据从旧列复制到新列,然后删除旧列。

希望对您有所帮助!


1
这可能是可行的,但新添加的列将成为表中的最后一列,而我不想要那样。虽然有after可以在指定的列后添加,但它在CE中不起作用。它找不到关键字after。这是我的查询:“ALTER TABLE Inverters ADD COLUMN NewC int after Product”,这是错误:“解析查询时出错。[令牌行号=2,令牌行偏移量=21,错误的令牌=after]”。 - lucian
从这里看 http://msdn.microsoft.com/en-us/library/ms174123.aspx,CE中的Alter Table似乎缺少该功能。缺少这个功能后,我不确定如何保留当前的顺序,除非重新创建表。就个人而言,我不会过于担心,因为列顺序将由我的select语句指定。 - Robb
2
完美的解决方案(除非该列是索引的一部分)。记住第一个命令中的数据类型,否则脚本将失败/崩溃/成功... - Geoff
1
我必须添加[newColumn]数据类型,例如[HandlebarsTemplate] ntext才能使其正常工作,否则感谢99.999%的答案! - Colin Wiseman
1
@ColinWiseman 感谢您的提醒,我应该在9年前第一次指出时更新答案。现在已经更新了 - 迟到总比没有好。 - Robb

2

sp_rename works with columns too:

EXEC sp_rename
objname = '< Table Name.Old Column Name >',
@newname = '<New Column Name>',
@objtype = 'COLUMN'  

例子:

SP_RENAME 'MyTable.[MyOldColumnName]' , '[MyNewColumnName]', 'COLUMN'  



更新:实际上,SQL CE中没有sp_rename过程!您可以在http://www.bigresource.com/Tracker/Track-ms_sql-4Tvoiom3/找到解决方案。


你确定它也适用于Compact Edition吗?在发布这个问题之前,我尝试过了,用了你的例子,但是它没有工作。这里是我得到的错误信息:为该过程指定的参数值无效。[参数 # = 3,过程名称(如果已知) = sp_rename] - lucian
你是对的。抱歉。似乎SQLCE中没有sp_rename可用。我会更新我的答案... - Kamyar
1
在 MS Compact Edition 2008 中,我仍然可以成功地使用“EXEC sp_rename 'demo','pets'”来重命名表。但是,对于重命名列,却失败了。 - msinfo
@Kamyar,您添加的链接现在已经失效。 - Doctor Jones

0

SDF Viewer内置了此功能,您还可以重命名索引、键和关系。只需在数据库树视图中右键单击要更改的名称即可。


如果您能提供SDF Viewer文档的链接,那将非常有帮助。 - Vaibhav Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接