首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VS 2010数据库项目在列名更改时删除数据

VS 2010数据库项目在列名更改时删除数据
EN

Stack Overflow用户
提问于 2010-06-11 01:33:25
回答 3查看 4.2K关注 0票数 4

我正在测试Visual Studio2010的新数据库项目功能,并希望更改表中列的名称。我在create脚本中更改了名称,并将其部署到数据库中。生成的脚本只是删除了该列,并使用正确的名称添加了一个新列,但是所有数据都丢失了。

是否有不删除列数据的设置?

我正在寻找这个问题的"DataDude“解决方案。(如果有)

代码语言:javascript
复制
PRINT N'Altering [dbo].[Users]...';

GO
ALTER TABLE [dbo].[Users] DROP COLUMN [TestX];

GO
ALTER TABLE [dbo].[Users]
    ADD [Testn] NVARCHAR (50) NULL;

GO

谢谢你,基思

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-11 03:27:24

通过单击[查看][ ->数据库架构视图]来使用[架构视图

展开表及其列。

右键单击该列,然后单击Refactor -> Rename...

在选中“预览更改”框的情况下更改“新名称”字段中的名称。

请注意,它不仅更改了列名,还更改了可能引用该列的存储过程。

在数据库项目中,会创建一个显示名称更改的refactorlog文件。

当针对现有数据库部署新模式时,DataDude似乎会查看重构日志文件和dbo._Refactorlog表,以确定需要针对数据库处理哪些重构。

下面是它使用此过程生成的代码,该过程更改也在存储过程中引用的列名:

代码语言:javascript
复制
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

基思

票数 7
EN

Stack Overflow用户

发布于 2010-06-11 01:37:01

如果表很小,则可以使用正确的列创建新表,然后将旧表中的列插入到新表中,并在执行过程中更改列。

如果表很大,并且您没有足够的时间、内存或精力来复制整个表,那么可以先执行alter table add new_column,然后执行update table set new_column=old_column,然后执行alter table drop column old_column

语法当然是简化的。

票数 1
EN

Stack Overflow用户

发布于 2010-06-11 01:44:44

Visual Studio数据库项目处理架构更改的方式导致了这种混乱。VS很难判断您是简单地重命名了一个列(并且应该保留数据),还是删除了该列并添加了一个不同的列。我的公司在一个数据库模式源代码控制产品上花了相当长的时间,它有所有这些相同的问题。

最后,我相信处理模式更改的最好方法是K. Scott Allen (referenced by Jeff Atwood)提出的方法。本系列文章将为您提供一个更好的数据库版本控制解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3016913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档