4

我正在测试 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

谢谢你,基思

4

3 回答 3

7

通过单击 View -> Database Schema View 使用模式视图

展开表及其列。

右键单击该列,然后单击重构 -> 重命名...

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

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

在 Database 项目中创建了一个显示名称更改的重构日志文件。

当针对现有数据库部署新模式时,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-10T19:27:24.070 回答
1

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

最后,我开始相信处理模式更改的最佳方法是K. Scott Allen 提出的(由 Jeff Atwood 引用)。本系列文章应该让您走上更好的数据库版本控制解决方案的道路。

于 2010-06-10T17:44:44.437 回答
1

如果表很小,您可以创建一个包含正确列的新表,然后从旧表插入新表,随时更改列。

如果表很大,并且您负担不起复制整个表的时间、RAM 或精力,那么 alter table add new_columnupdate table set new_column=old_column 可以 alter table drop column old_column.

语法当然是简化的。

于 2010-06-10T17:37:01.460 回答