sql-server - SQL Server 在(错误地)创建新列后删除了我的表..到底发生了什么?

标签 sql-server sql-server-2005

我在 SQL Server Management Studio 表设计器中向现有表添加了一个新列。类型 INT,不为空。 未设置默认值。

我生成了一个更改脚本并运行它,它出错并警告新列不允许空值,并且未设置默认值。它说“0行受影响”。

数据仍然存在,并且由于某种原因,我的新列在 SSMS 左侧数据库树上的“列”文件夹中可见,即使它显示“0 行受影响”并且无法进行数据库更改。

因为新列在列表中可见,所以我想我应该继续更新所有行并添加一个值。

UPDATE MyTable SET NewColumn = 0

繁荣.. table 擦干净了。每一行都被删除。

这是一个大问题,因为它位于生产数据库上,而该数据库在我不知情的情况下并未进行备份。但是..可以通过一些手动输入来恢复,所以不是世界末日。

任何人都知道这里可能发生了什么......也许内部发生了什么可能导致我的更新语句删除表中的每一行?

最佳答案

UPDATE 语句无法删除行,除非有一个触发器随后执行删除,并且您说该表没有触发器。

所以这一定是我在评论中为您列出的场景:行没有正确加载到新表中,并且旧表被删除。

请注意,它甚至有可能看起来适合您,其中行确实在某一点加载 - 如果事务未提交,然后(例如)稍后当您的 session 终止时,事务会自动回滚。该事务也可能因其他原因而被回滚。

此外,我可能得到的顺序不正确:它可能会以新名称创建新表,加载行,删除旧表,然后重命名新表。在这种情况下,您可能查询了错误的表以查明数据是否已加载。我现在一时记不起表格设计器是如何构造脚本的——剥这只猫的皮的方法不止一种。

关于sql-server - SQL Server 在(错误地)创建新列后删除了我的表..到底发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17244518/

相关文章:

sql-server - Entity Framework Core + 空间数据正在引发 SRID 无效错误

sql - 从我的查询中排除周末

sql - 字符串或二进制数据将被截断。该语句已终止。 (长度相同)

用于更改所有存储过程中的所有表引用的 SQL 脚本

sql-server - 如何替换分号?

SQL SELECT... WHERE with REPLACE - 担心效率低下

SQL Server 连接复杂子查询

mysql - 从 sql 表连接到 Excel 工作表

sql - 不一致的 SQL Server 执行计划键查找

ruby-on-rails - 将 Rails 应用程序从 Windows 连接到 SQL Server 2005