我正在维护代码,我们有两个数据库用于两个当前正在运行的应用程序,具有相同的代码。但是,有一个字段错误地在这两个数据库中有两个不同的名称,我们现在无法访问更正数据库。如何让我的代码了解哪个应用程序正在运行并实时在查询中使用正确的字段?
示例:
private integer testField;
数据库1中的查询:
SELECT name, family, test_name from Student;
数据库2中的查询:
SELECT name, family, test from Student;
答案 0 :(得分:3)
您可以选择更改查询吗?如果是,则尝试使用列存在的元数据信息,如:
if exists (select 1 from Information_Schema.Columns where Table_Name = '<your table>' and Column = '<the column you want to check for presence>')
<Your query execution>
else
<Other query execution>
注意:信息架构视图是SQL Server为获取元数据提供的几种方法之一
答案 1 :(得分:0)
在软件启动时,您查询数据库以查找列的名称,例如使用ResultSetMetaData或使用特定于数据库的查询。
然后,假设您至少有一半不错的设计,而不是随机乱丢的SQL,您可以修改查询以使用列名变量。当然,如果您的代码设计糟糕(听起来很可能会考虑问题),这可能很难或不可能。
编辑:
您说您无法访问数据库&#34;,但您的代码至少可以访问。上面的内容也可用于检查数据库中的错误名称,如果存在则执行ALTER TABLE Student RENAME test TO test_name
语句(Postgres语法中给出的示例)。这假设您连接的数据库用户具有更改架构的权限。
答案 2 :(得分:0)
执行select * from Student
并从生成的ResultSet调用getMetaData()获取ResultSetMetaData实例。
使用getColumnName()获取表格的实际列名。
答案 3 :(得分:-3)
使用
as
在查询中,即:
SELECT wrong_name as correct_namefrom table;