Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 VS 2010数据库项目在列名更改时删除数据_Visual Studio 2010_Data Integrity_Datadude - Fatal编程技术网

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

Visual studio 2010 VS 2010数据库项目在列名更改时删除数据,visual-studio-2010,data-integrity,datadude,Visual Studio 2010,Data Integrity,Datadude,我正在测试VisualStudio2010的新数据库项目功能,并希望更改表中列的名称。我更改了创建脚本中的名称,并将其部署到数据库中。生成的脚本只是删除了列并添加了一个具有正确名称的新列,但所有数据都丢失了 是否存在不会删除列数据的设置 我正在寻找这个问题的“DataDude”解决方案。(如有) 谢谢,, Keith如果表很小,可以创建一个包含正确列的新表,然后从旧表插入到新表中,同时更改列 如果表很大,并且您无法负担复制整个表所需的时间、RAM或精力,那么您可以 alter table添加新列

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

是否存在不会删除列数据的设置

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

谢谢,,
Keith

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

如果表很大,并且您无法负担复制整个表所需的时间、RAM或精力,那么您可以
alter table添加新列
updatetable set new\u column=old\u column
alter table drop column old\u column


语法当然是简化了的。

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


最后,我开始相信处理模式更改的最佳方法是由提出的。本系列文章将为您提供一个更好的数据库版本控制解决方案。

通过单击“视图->数据库模式视图”使用模式视图

展开表及其列

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

选中“预览更改”框,在“新名称”字段中更改名称

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

在数据库项目中,将创建一个显示名称更改的重构日志文件

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

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

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

Keith

是的,执行重构会保持原始数据列的完整性。只有列名更改。当我右键单击列名(在table.sql文件中)时,我没有重构选项。我正在使用VS2010SP1。如果我选择列名并单击Data | Refactor | Rename,我会得到一个信息对话框,其中有一条消息:“在schema视图中选择要重构的schema对象”。有人知道我为什么没有在右键菜单中看到重构选项吗?回答我自己的问题。您必须在模式视图中,然后展开表列表,然后展开表的列列表。然后右键单击列名进行重构。值得注意的是,重构工具仅在VS 2010 Premium及更高版本中可用。它们并不存在于专业领域。
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