我正在测试Visual Studio 2010的新数据库项目功能,并希望更改表中列的名称。我在创建脚本中更改了名称并将其部署在数据库中。生成的脚本刚刚删除了列并添加了一个具有正确名称的新列,但所有数据都已丢失。
是否有不会丢弃列数据的设置?
我正在寻找这个问题的“DataDude”解决方案。 (如果有的话)
PRINT N'Altering [dbo].[Users]...';
GO
ALTER TABLE [dbo].[Users] DROP COLUMN [TestX];
GO
ALTER TABLE [dbo].[Users]
ADD [Testn] NVARCHAR (50) NULL;
GO
谢谢你, 基思
答案 0 :(得分:7)
点击查看 - >使用架构视图;数据库架构视图
展开表格及其列。
右键单击该列,然后单击“重构” - >重命名...
在“新名称”字段中更改名称,并选中“预览更改”框。
请注意,它不仅会更改列名,还会更改可能引用该列的存储过程。
在Database项目中,创建了一个显示名称更改的refactorlog文件。
当针对现有数据库部署新模式时,DataDude会查看refactorlog文件和dbo._Refactorlog表,以确定需要针对数据库处理哪些重构。
以下是使用此过程生成的代码,更改了在存储过程中也引用的列名:
EXECUTE sp_rename @objname = N'[dbo].[Users].[TestF]', @newname = N'TestG', @objtype = N'COLUMN';
GO
PRINT N'Altering [dbo].[ListUsers]...';
GO
ALTER PROCEDURE [dbo].[ListUsers]
AS
SELECT [ID], [FirstName], [LastName], [TestG]
FROM Users
RETURN 0
GO
基思
答案 1 :(得分:1)
如果表很小,您可以使用正确的列创建一个新表,然后从旧表插入到新表中,随时更改列。
如果表格很大,而你无法承担复制整个表格的时间,内存或工作量,那么你可以
alter table add new_column
然后
update table set new_column=old_column
然后
alter table drop column old_column
。
语法当然是简化的。
答案 2 :(得分:1)
Visual Studio数据库项目处理架构更改的方式导致了这种混乱。 VS很难判断您是否只是重命名了一个列(并且应该保留数据)或者删除了列并添加了另一个列。我的公司在具有所有这些相同问题的数据库模式源代码控制产品上工作了很长时间。
最后,我开始相信处理架构更改的最佳方法是K. Scott Allen (referenced by Jeff Atwood)提出的方法。这一系列文章应该为您提供更好的数据库版本控制解决方案。