我们在SQL Server 2008上有一个表,它由各种存储过程填充。问题是这些存储过程的作者在代码中使用了一些糟糕的选择,并使用以下语法填充此表:
INSERT INTO persistant_table
SELECT *
FROM #temp_table_with_data
基本上,他们会在脚本中创建#temp_table_with_data
,列的顺序和名称与persistant_table
中的列名相同。
现在我需要向此persistant_table
添加另一列,但如果我这样做,我将打破所有存储过程。
我是否可以在不破坏所有存储过程的情况下向此表添加列? (从长远来看,我们将更改存储过程)。
谢谢
答案 0 :(得分:0)
不,我认为。选择*将选择所有列和列号匹配。
我认为将行更改为仅包含特定列或选择语句以使列具有默认值或null,然后*按顺序存储到列中,我认为不是很大的努力。但至少要改变一行
答案 1 :(得分:0)
" ALTER TABLE"是一个SQL语句,允许您对数据库表进行数据类型更改(即更改数据类型以及现有表中的Size列)。
ALTER TABLE TableName ALTER COLUMN ColumnName NVARCHAR(200)
答案 2 :(得分:0)
如果不影响旧脚本,则无法执行此操作。这就是为什么' SELECT *'不是好习惯。您最好使用显式列名创建新脚本 SELECT column1,column2 ....