我正在测试Visual Studio2010的新数据库项目功能,并希望更改表中列的名称。我在create脚本中更改了名称,并将其部署到数据库中。生成的脚本只是删除了该列,并使用正确的名称添加了一个新列,但是所有数据都丢失了。
是否有不删除列数据的设置?
我正在寻找这个问题的"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谢谢你,基思
发布于 2010-06-11 03:27:24
通过单击[查看][ ->数据库架构视图]来使用[架构视图
展开表及其列。
右键单击该列,然后单击Refactor -> Rename...
在选中“预览更改”框的情况下更改“新名称”字段中的名称。
请注意,它不仅更改了列名,还更改了可能引用该列的存储过程。
在数据库项目中,会创建一个显示名称更改的refactorlog文件。
当针对现有数据库部署新模式时,DataDude似乎会查看重构日志文件和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基思
发布于 2010-06-11 01:37:01
如果表很小,则可以使用正确的列创建新表,然后将旧表中的列插入到新表中,并在执行过程中更改列。
如果表很大,并且您没有足够的时间、内存或精力来复制整个表,那么可以先执行alter table add new_column,然后执行update table set new_column=old_column,然后执行alter table drop column old_column。
语法当然是简化的。
发布于 2010-06-11 01:44:44
Visual Studio数据库项目处理架构更改的方式导致了这种混乱。VS很难判断您是简单地重命名了一个列(并且应该保留数据),还是删除了该列并添加了一个不同的列。我的公司在一个数据库模式源代码控制产品上花了相当长的时间,它有所有这些相同的问题。
最后,我相信处理模式更改的最好方法是K. Scott Allen (referenced by Jeff Atwood)提出的方法。本系列文章将为您提供一个更好的数据库版本控制解决方案。
https://stackoverflow.com/questions/3016913
复制相似问题