在Ant事务中使用sql似乎不允许您在每个事务中执行多个CREATE
语句,因此我通过将每个CREATE
语句分离到单独的文件中来解决这个问题。我的构建脚本看起来像这样。
<sql
driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://${dbserver}"
userid="${username}"
password="${password}"
>
<transaction>use master</transaction>
<transaction>
IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'${dbname}')
DROP DATABASE [${dbname}]
</transaction>
<transaction>CREATE DATABASE [${dbname}]</transaction>
<transaction>use [${dbname}]</transaction>
<transaction src="${sqlscripts}mySproc.sql" />
</sql>
问题是我现在需要创建一个使用临时表的存储过程,但是构建脚本不会在一个事务中这样做。
CREATE PROCEDURE [dbo].[MySproc]
@Username varchar(128)
AS
BEGIN
CREATE TABLE #TEMP
(
Id int,
Description nvarchar(max)
);
RETURN 1
END
上面是我的程序的简化版本,Ant脚本抛出一个错误,因为在一个事务中使用两个CREATE
。周围有什么吗?解决方法是添加
delimiter="//"
到你的SQL标签。
<sql
driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://${dbserver}"
userid="${username}"
password="${password}"
delimiter="//"
>
...
</sql>