我目前有外部软件定期更新,因为它创建了新的数据库(我无法控制) 命名结构是:
我可以使用系统表来识别最新的系统表,但是如何将其称为活动数据库,因为其中的表不会更改?
EG。一个表valid.learner存在于两者中,但我希望它始终使用最后创建的数据库
这可能吗?
修改 我将查询位于同一服务器上的各种数据库。所有数据库都有静态结构,因此它只是我试图解析的数据库名称。
感谢您当前的回复,我认为最容易尝试的是自行复制数据库并将其重命名
答案 0 :(得分:3)
您可以执行以下操作:
declare @UseStatement nvarchar(100), @DatabaseName nvarchar(128)
select @DatabaseName = Name from sys.databases WHERE YourConditionToFindTheLatestOne) --make sure you only get one row here, only the latest db name
select @UseStatement = N'USE ' + QUOTENAME(@DatabaseName) + ';'
print @UseStatement
exec(@UseStatement)
您需要在每个脚本的顶部执行此操作,它将替换通常在您事先知道数据库名称时使用的静态Use DatabaseName;
。
答案 1 :(得分:1)
问题相当广泛。缺少大量信息,例如是否存在任何跨数据库查询,执行了哪种处理,数据库有多大?所有数据库都在同一台服务器上吗?
有很多选择:
听起来这个数据库是来自政府应用程序的参考数据。在这种情况下,可以将其复制到具有已知名称的另一个数据库。
如果您不 运行跨数据库查询,即如果您不想加入,Rigerta Demiri已经发布了如何针对最新数据库执行查询的方式数据库和应用程序之间的数据。只需更改目标数据库即可。您也可以在连接字符串中执行此操作。
您还可以使用SSIS包将从最新数据库中数据复制到您自己的数据库中。可以以编程方式修改源(即参考数据库)。它也可以指定为包参数。
您可以在 数据库中为CREATE SYNONYM MyTable FOR ThatDB.dbo.MyTable
的参考表创建SYNONYM。这可以通过脚本自动执行,该脚本读取最新的数据库名称,删除旧的同义词并使用最新的数据库创建新的同义词。
哪个最好取决于数据量,数据类型,更改频率,使用方式,愿意花在维护上的时间等等
<强>更新强>
我忘记了更高级的方案 - 如果数据 更改,则只读取源数据库中已修改的行并将其复制到目标。换句话说,就像任何其他ETL场景一样对待它。自2005年以来,SQL Server提供轻量级更改跟踪,必须在每个表上激活。如果您不想想要在每次部署新版本时修改源代码,那么您将不得不退回检查时间戳或创建/更新的字段。
答案 2 :(得分:0)
以下可能有助于找到最新的数据库:
select top 1 name
from sys.databases
where name like 'FIS_SUB_0030310QGT810_700133_HULLCO_1617ILR%'
order by create_date desc