我们使用的是 Visual Studio 2010,但这是最初使用 VS2003 构思的。
我会将最好的建议转发给我的团队。目前的设置几乎让我呕吐。这是一个 C# 解决方案,大多数项目都包含 .sql 文件。因为我们支持 Microsoft、Oracle 和 Sybase,所以自制了一个预处理器,很像 C 预处理器,只是替换是由自制的 C# 程序执行的,而不使用yacc
类似的工具。#ifdefs
用于条件宏定义,是的 - 宏就是这样做的方式。一个宏可以扩展为另一个或两个宏,但这最终应该终止。它们中只有宏#ifdef
——其余的类似 SQL 的代码只使用这些宏。
现在,各种配置:Debug, MNDebug, MNRelease, Release, SQL_APPLY_ALL, SQL_APPLY_MSFT, SQL_APPLY_ORACLE, SQL_APPLY_SYBASE, SQL_BUILD_OUTPUT_ALL, SQL_COMPILE
,以及另外 2 个。
还有:Any CPU, Mixed Platforms, Win32
。
让我抓狂的是必须正确配置它以及从配置中选择正确的12 x 3 = 36
配置,以及必须根据数据库类型替换数据库名称:配置、主数据库或网关。我认为应该将配置简化为仅 Debug、Release 和 SQL_APPLY。此外,使用 0、1 和 2 似乎是 80 年代......最后,我认为我打算为 3 种类型的供应商构建或不构建 3 种类型的数据库应该只配置一个井字游戏板,例如:
XOX
OOX
XXX
在这种情况下,这意味着构建 MSFT+CONFIG、所有 SYBASE 和所有 GATEWAY。
尽管如此,使用文本文件和预处理器以及许多配置的整体东西似乎非常笨重。现在是 2010 年,肯定会有人拥有非常干净和/或有创意的工具/解决方案。唯一的优点是现有的宏集合已经过很好的测试。
您是否曾经编写过适用于多个供应商的 SQL?你是怎么做到的?
SqlVars.txt(30 个用户中的每个人都制作了一个模板的副本并对其进行修改以满足他们的需要):
// This is the default parameters file and should not be changed.
// You can overwrite any of these parameters by copying the appropriate
// section to override into SqlVars.txt and providing your own information.
//Build types are 0-Config, 1-Main, 2-Gateway
BUILD_TYPE=1
REMOVE_COMMENTS=1
// Login information used when applying to a Microsoft SQL server database
SQL_APPLY_MSFT_version=SQL2005
SQL_APPLY_MSFT_database=msftdb
SQL_APPLY_MSFT_server=ABC
SQL_APPLY_MSFT_user=msftusr
SQL_APPLY_MSFT_password=msftpwd
// Login information used when applying to an Oracle database
SQL_APPLY_ORACLE_version=ORACLE10g
SQL_APPLY_ORACLE_server=oradb
SQL_APPLY_ORACLE_user=orausr
SQL_APPLY_ORACLE_password=orapwd
// Login information used when applying to a Sybase database
SQL_APPLY_SYBASE_version=SYBASE125
SQL_APPLY_SYBASE_database=sybdb
SQL_APPLY_SYBASE_server=sybdb
SQL_APPLY_SYBASE_user=sybusr
SQL_APPLY_SYBASE_password=sybpwd
... (THIS GOES ON)