【发布时间】:2017-08-27 16:39:51
【问题描述】:
我正在尝试使用 liquibase 向角色添加成员,但 SQL 与 SQL Server 2008 到 2012 不同。
SQL Server 2008:
exec sp_addrolemember db_datareader, MYUSER
SQL Server 2012:
ALTER ROLE db_datawriter ADD MEMBER MYUSER
当通过 liquibase 针对 SQL Server 2012 运行时,以下 SQL 可以正常工作,但是当针对 SQL Server 2008 运行时,它会失败并显示:
关键字“ADD”附近的语法不正确
代码:
DECLARE @ver nvarchar(50),
@intVer int,
@ver2008 int = 10
SET @ver = CAST(serverproperty('ProductVersion') AS nvarchar)
SET @intVer = CAST(SUBSTRING(@ver, 1, CHARINDEX('.', @ver) - 1) AS int)
IF (@intVer = @ver2008)
exec sp_addrolemember db_datawriter, MYUSER
ELSE
ALTER ROLE db_datawriter ADD MEMBER MYUSER;
我尝试分离版本,将 SQL Server 2008 放在一个文件中,将 2012 放在另一个文件中,并在变更日志的顶部(在变更集之外)使用“前提条件”。但是只有 2 个 OnFail 选项,即停止整个更新的 HALT 或仅继续脚本的 WARN,这两个选项都不能满足我的需要。
我需要让脚本确定它正在使用哪个版本的 SQL Server,并且只运行那个特定的 liquibase 脚本,无论它是变更集还是变更日志。
【问题讨论】:
标签: sql-server liquibase