创建有效的SQL脚本以生成SQL Server数据库
我正在测试使用SQL Server数据库的应用程序。出于测试目的,我非常希望能够使用HSQL等内存数据库。实际上我的测试正在运行,但我还有一个突出的难点 - 我很难生成一个可用于构建HSQL数据库的SQL脚本。由于这个系统还在开发中,数据库的更改可能会发生,所以我不想花时间手动更新SQL脚本。创建有效的SQL脚本以生成SQL Server数据库
在SQL Server Management Studio中,我可以生成一个脚本来构建该数据库。但是,该脚本包含许多SQL Server特有的“东西”。因此,我不能将该脚本转移到HSQL并执行。相反,我需要花费大量的时间来排除那些在HSQL中不起作用的东西。
一位同事建议使用PowerBuilder来生成脚本,虽然它生成的脚本比较干净,但它仍然不会在HSQL中按原样运行。
任何人都可以提出一种方法(工具,过程等),我可以用它来指向SQL Server数据库并生成一个脚本,它将在HSQL中构建完全相同的数据库?
谢谢!
假设您使用Hibernate,您可以在您的测试用例中配置Hibernate,以在创建sessionFactory
时创建表。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>...hbm file...</value>
...
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
...
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
唯一的缺点,这种方法是,如果你的HBM文件不具有匹配的设置你的物理SQL Server数据库(例如,你忽略你的HBM文件一定的约束或列),然后创建HSQL中的表格将会有所不同。
正如limc给出的答案的后续,这是我所能做的。
我使用Spring和Hibernate所以我能够把我的春节,数据配置文件,并把它变成这样:
<bean id="sessionFactory" name="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
...hbm files...
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${db.dialect}</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.use_sql_comments">false</prop>
<prop key="hibernate.hbm2ddl.auto">${ddl.create}</prop>
</props>
</property>
</bean>
随着到位,我能propertyConfigurer配置填写占位符,看起来像这样:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:test-messages.properties</value>
</property>
</bean>
</beans>
我有我的测试这些文件之一,多了一个我的生产代码。上面显示的一个是我的测试版本,并引用文件test-messages.properties,看起来像这样:
db.dialect=org.hibernate.dialect.HSQLDialect
ddl.create=create
这实际工作非常漂亮,我可以利用占位符重用几乎所有的我的生产配置文件和propertyConfigurer构造。我的测试环境中唯一需要的额外文件是propertyConfigurer配置文件和它们指向的属性文件。
谢谢,limc!
另外,我确实看到limc提到的问题。该系统被设计为部署用于连接到生产环境中的SQL Server数据库,该数据库不会通过hbm2ddl创建。所以,如果我的HBM文件中有错误,我的测试可能都会正常工作,而我仍然可能会遇到生产故障。
一方面,我对此非常不满,但另一方面,我实际上可以以完全独立的方式对数据库运行测试用例。就这一解决方案而言,有人可以从源代码管理中检查此项目,并立即运行测试用例,而无需执行任何类型的数据库设置。我也喜欢那个。不幸的是,我还没有找到一个真正有两种方法的好方法。
所有补充+1。 :) – limc 2011-02-01 01:42:22
假设您可以通过ODBC连接到HSQL,可以创建一个[SQL Server链接服务器实例](http://msdn.microsoft.com/zh-cn/library/aa213778%28SQL.80%29.aspx) ,并将表格和数据转储到HSQL中。然后应该有HSQL工具根据现有的数据库/模式生成脚本。 – 2011-01-28 16:48:00