我有这样的加入
USE [PriceBook]...
FROM [MidasLiveWeb].[ProductCatalogue].[HardwareMake] mk
JOIN [MidasLiveWeb].[ProductCatalogue].[HardwareModel] mo
ON mo.HardwareMake_Id = mk.Id
INNER JOIN MidasLiveWeb.ProductCatalogue.HardwareModelHardwareType AS hmht
ON hmht.HardwareModel_Id = mo.Id
INNER JOIN MidasLiveWeb.ProductCatalogue.HardwareType AS ht
ON ht.Id = hmht.HardwareType_Id
但是在UAT中它应该看起来像...
USE [PriceBookUAT]
FROM [MidasUATWeb].[ProductCatalogue].[HardwareMake] mk
JOIN [MidasUATWeb].[ProductCatalogue].[HardwareModel] mo
ON mo.HardwareMake_Id = mk.Id
INNER JOIN MidasUATWeb.ProductCatalogue.HardwareModelHardwareType AS hmht
ON hmht.HardwareModel_Id = mo.Id
INNER JOIN MidasUATWeb.ProductCatalogue.HardwareType AS ht
ON ht.Id = hmht.HardwareType_Id
我使用RedGate工具带进行源代码控制,我可以使用模式比较将文件从测试复制到实时运行,但是我必须进行手动更改。问题是我要访问同一服务器上的其他数据库(一个连接字符串),否则我可能只有相同的代码,只是一个不同的IP地址。但是SQL Server Lics很昂贵,因此很少见。 另一个方法(例如使用EF6)将是在代码中包含SQL并进行字符串转换-我们使用存储过程来提高性能。 如果我们不将SQL保留在redGate源代码控制中,而是在VS项目中,则可以使用T4转换。我们的DBA在主表中建议Synomyms,它在LIVE / UAT / DEV之间共享,因此很少使用。
我有这样的加入
USE [PriceBook];...
FROM [MidasLiveWeb].[ProductCatalogue].[HardwareMake] mk
JOIN [MidasLiveWeb].[ProductCatalogue].[HardwareModel] mo
ON mo.HardwareMake_Id = mk.Id
INNER JOIN MidasLiveWeb.ProductCatalogue.HardwareModelHardwareType AS hmht
ON hmht.HardwareModel_Id = mo.Id
INNER JOIN MidasLiveWeb.ProductCatalogue.HardwareType AS ht
ON ht.Id = hmht.HardwareType_Id
但是在UAT中它应该看起来像...
USE [PriceBookUAT];
FROM [MidasUATWeb].[ProductCatalogue].[HardwareMake] mk
JOIN [MidasUATWeb].[ProductCatalogue].[HardwareModel] mo
ON mo.HardwareMake_Id = mk.Id
INNER JOIN MidasUATWeb.ProductCatalogue.HardwareModelHardwareType AS hmht
ON hmht.HardwareModel_Id = mo.Id
INNER JOIN MidasUATWeb.ProductCatalogue.HardwareType AS ht
ON ht.Id = hmht.HardwareType_Id
几乎就像我需要可以在转换或预部署脚本中使用的%DBname%var一样。 如
%DBname% ='UAT'
USE [PriceBook%DBname%] or
Select * from [Midas%DBname%Web].[ProductCatalogue].[HardwareMake]