我们有一个遗留的应用程序,写得非常好,但具有合理的数据结构(只需要稍加修改)。然而,数据库中的命名约定是可怕的。我们要做的是将SYSTEMNAME
等名称转换为SystemName
,将EMPLOYEEID
转换为EmployeeId
。
这个问题目前有解决方案吗?我们已经考虑过采取以下措施:
System
,Name
,Employee
,Id
)是否有可用的当前系统可以解决此问题并且可能包含字典?由于现有的解决方案在我们看来是可行的(系统不是很大,约30个表),因此不愿意花钱购买商业应用程序。
答案 0 :(得分:1)
我不知道这样的系统是否存在。你的要求是如此罕见所以我认为 在你的情况下(小系统)游戏是不值得的。
当我需要将数据库从SQL Server移动到Oracle时,我需要重命名实体。我的系统更大:它有超过300个表和200多个其他实体。 我做了什么:
我的脚本是用Powershell编写的,并且有一些特定的企业逻辑,所以我不能把它放在这里。
我的建议是:确保你做得好,尝试生成重新创建数据库脚本,然后更改名称。
答案 1 :(得分:0)
不可能知道在哪里放大写字母。当然有些猜测可能有所帮助。但为了确保,您需要手动检查值
此脚本将为您提供所有字段和表格的驼峰案例:
select b.table_schema + '.'+a.table_name+'.'+column_name tablecolumn,
upper(left(column_name, 1))+ lower(stuff(column_name, 1,1,'')) newcolumn
into #t
from INFORMATION_SCHEMA.COLUMNS a
join
INFORMATION_SCHEMA.TABLES b
on a.table_name = b.table_name
and b.table_type = 'base table'
insert #t
select table_schema + '.' + table_name tablecolumn,
upper(left(table_name, 1))+ lower(stuff(table_name, 1,1,'')) newcolumn
from INFORMATION_SCHEMA.TABLES
在这里,您可以从#t中选择*并在运行此脚本的最后一部分之前将值操作为您需要的任何值。
-- here is an example how you can replace columns like
-- SYSTEMNAME to SystemName, and EMPLOYEEID to EmployeeId in the temporary table
update #t set newcolumn = replace(replace(newcolumn, 'name', 'Name'), 'id', 'Id')
--loop cursor
Declare @tablecolumn as nvarchar(500)
Declare @newcolumn as nvarchar(500)
Declare SqlCursor CURSOR FAST_FORWARD FOR
SELECT tablecolumn, newcolumn FROM #t
OPEN SqlCursor
FETCH NEXT FROM SqlCursor
INTO @tablecolumn, @newcolumn
WHILE @@FETCH_STATUS = 0
BEGIN
-- This is the actual renaming
EXEC sp_rename @tablecolumn, @newcolumn
FETCH NEXT FROM SqlCursor
INTO @tablecolumn, @newcolumn
END
CLOSE SqlCursor
DEALLOCATE SqlCursor
drop table #t
答案 2 :(得分:0)
我们得到了解决方案:
我们能够按照长度的升序建立表名和列名列表:
Type Value
Column NAME
Table EMPLOYEE
Column SYSTEMNAME
Column EMPLOYEEID
Column SYSTEMNAMEEMPLOYEEIDBLABLA
然后算法分析每个名称并建立已知单词列表
Input Output Word List (ordered by length descending)
NAME Name Name
EMPLOYEE Employee Name, Employee
SYSTEMNAME SystemName Name, System, Employee
EMPLOYEEID EmployeeId Id, Name, System, Employee
.. and so forth..
这让我们达到了95%
由于无法识别的字词,某些字段仍然不正确。 (在这种情况下,BLABLA
将成为Blabla
,而我们可能更喜欢BlaBla
)
因此我们可以添加到输入文件:
Type Value
Word BLA
Column NAME
Table EMPLOYEE
Column SYSTEMNAME
然后它会将Bla
识别为单词并生成正确的输出。