【发布时间】:2018-11-01 21:42:17
【问题描述】:
我们在 SQL Server 2008 上有一个表,该表由各种存储过程填充。问题是这些存储过程的作者在代码中使用了一些糟糕的选择,并使用以下语法填充了这个表:
INSERT INTO persistant_table
SELECT *
FROM #temp_table_with_data
基本上,他们会在脚本中创建一个#temp_table_with_data,并且列的顺序和名称与persistant_table 中的相同。
现在我需要在persistant_table 中添加另一列,但如果这样做,我将破坏所有存储过程。
有没有办法让我在不破坏所有存储过程的情况下向该表中添加一列? (从长远来看,我们将更改存储过程)。
谢谢
【问题讨论】:
-
没有。尽快修复 SP。
-
没有解决办法。修复 SP。修复 SP 比寻找只会让事情变得更糟的变通方法要好。
-
您可以创建一个新的持久表,其中包含新列和与原始表相同的主键值。然后,您可以创建一个连接两个表的视图(并为空行提供适当的默认值),它对用户来说是相当透明的。
-
如何在您的 SP 中创建#temp_table_with_data?如果它是在 SP 执行期间基于persistant_table 创建的,那么两个表上的列应该相等。所以每次你运行SP时,如果你在persistant_table中添加新列,它也会在你运行SP时添加到#temp_table_with_data,对吗?这两个表仍然匹配。这意味着插入语句仍然有效。还是有别的?
-
为插入语句提供列名,而不是 * 仅使用您要插入的那些特定列。
标签: sql sql-server alter-table