Ich versuche liquibase zu verwenden Mitglieder zu einer Rolle hinzufügen, aber die SQL unterscheidet sich von SQL Server 2008 bis 2012Run verschiedene Skripte liquibase basierend auf SQL Server Version
SQL Server 2008:
exec sp_addrolemember db_datareader, MYUSER
SQL Server:
ALTER ROLE db_datawriter ADD MEMBER MYUSER
Die folgende SQL, wenn sie über liquibase gegen SQL Server 2012 funktioniert ordnungsgemäß ausgeführt, aber wenn sie gegen SQL Server 2008 lief es nicht und sagt:
falsche Syntax nahe dem Schlüsselwort 'ADD'
Code:
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;
Ich habe versucht, die Versionen zu trennen, SQL Server 2008 in einer Datei und 2012 in ein anderes setzen und mit einem ' Vorbedingung 'am Anfang des Changelogs (außerhalb eines Änderungssatzes). Aber es gibt nur 2 OnFail-Optionen, HALT, die das gesamte Update stoppen, oder WARN, das nur das Skript fortsetzt, die beide mir nicht geben, was ich brauche.
Ich muss in der Lage sein für das Skript herauszufinden, welche Version von SQL Server es arbeitet und nur dieses bestimmte Liquibase-Skript, ob es ein Changeset oder Changelog sein.
Dies funktioniert, aber ich hatte gehofft, ich hätte nicht die gleiche Logik, um die Version in jedem Änderungssatz zu erhalten, wo ich ein Mitglied zu einer Rolle hinzufügen. – Aaron