我想要将一个表格中的列名修改为新名称,与IT技术有关。但问题在于,我想要手动修改“触发器”或“存储过程”中的“列名”。
是否有更好的方法来完成这个任务?
使用以下命令来重命名列。
sp_RENAME 'Tablename.old_Column', 'new_column' , 'COLUMN';
同样地,如何在不打开每个脚本的情况下为触发器或存储过程执行此操作?
我想要将一个表格中的列名修改为新名称,与IT技术有关。但问题在于,我想要手动修改“触发器”或“存储过程”中的“列名”。
是否有更好的方法来完成这个任务?
使用以下命令来重命名列。
sp_RENAME 'Tablename.old_Column', 'new_column' , 'COLUMN';
嗯,有许多第三方工具承诺提供这种“安全重命名”功能,一些免费,一些则不是:
你可以按照@GorDon的建议去做。
除此之外,你还可以尝试以下查询:
select o.name, sc.* from sys.syscomments sc inner join sys.objects o on sc.id=o.object_id where sc.text like '%oldcolumnname%'
这将返回所有存储过程和触发器的列表。你也可以修改筛选条件以获取精确的列表,然后手动进行修改非常容易。
但无论你决定如何操作,都不要轻易删除旧列。为了安全起见,一定要备份。
这个建议与 Oracle 数据库有关,但其他 DBMS 中可能有等效的解决方案。
解决您问题的临时方法是创建一个伪列。 这个方案看起来有点像 hacky,因为伪列的语法需要一个表达式。 我能想到的最简单的表达式是下面的 case 语句。 如果您能让它更简单,请告诉我。
ALTER TABLE <<tablename>> ADD (
<<new_column_name>> AS (
CASE
WHEN 1=1 THEN <<tablename>>.<<old_column_name>>
END)
);
这种策略基本上通过评估 case 语句并将 <<old_column_value>>
的值复制到 <<new_column_value>>
来动态创建一个新列。因为您正在动态插入此列,所以与仅选择原始列相比,会有性能损失。
唯一需要注意的是,如果您只复制一次列,则此方法才有效。在 Oracle 中,多个伪列不能包含重复表达式。
您可以考虑的另一种策略是创建视图,并且您可以随意命名列。您甚至可以对视图执行 INSERT/UPDATE/DELETE(执行 DML),但这将给您一个全新的 table_name,而不仅仅是一个新列。但是,这也会导致性能下降,与访问底层表相比。
alter table dbo.tbBase alter column [OriginalName] UNIQUEIDENTIFIER not null GO
。 - jeanSSDT项目
。您可以分享一个简单的示例吗? - Pரதீப்