2017-04-02 3 views
0

내가 역할에 구성원을 추가 liquibase을 사용하려고하지만, SQL은 SQL 서버 2008 SQL Server 2008의실행 다른 liquibase 스크립트 SQL Server 버전에 따라

2012 년에 다른 :

exec sp_addrolemember db_datareader, MYUSER 

SQL 서버 2012 :

ALTER ROLE db_datawriter ADD MEMBER MYUSER 

2012 올바르게 작동 SQL 서버에 대한 liquibase를 통해 실행할 수 있지만 SQL 서버 2008에 대해 실행했을 때 실패하고 다음 SQL 말한다 :

'추가'키워드 근처

의 구문이 잘못

코드 :

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; 

내가 다른 하나 개의 파일과 2012 년에 SQL Server 2008을 넣고 사용하여 버전을 분리 시도한 ' 선결 조건 '을 변경 로그의 바깥쪽에 위치시킨다. 그러나 전체 업데이트를 중지하는 HALT 또는 스크립트를 계속 유지하는 WARN은 두 가지 OnFail 옵션 만 있습니다. 둘 다 필요한 정보를 제공하지 않습니다.

변경 내용 또는 변경 로그 여부와 상관없이 스크립트가 작업중인 SQL Server의 버전을 확인하고 특정 liquibase 스크립트 만 실행할 수 있어야합니다.

답변

1

구문을 인식 할 수없는 경우 전체 일괄 처리 컴파일이 실패합니다. EXECUTE에서 문을 줄 바꿈하거나 sp_executesql을 사용하여이 문제를 해결할 수 있습니다.

IF (@intVer = @ver2008) 
    EXECUTE(N'exec sp_addrolemember db_datawriter, MYUSER;') 
ELSE 
    EXECUTE(N'ALTER ROLE db_datawriter ADD MEMBER MYUSER;'); 
+0

이 작동하지만, 난 내가 역할에 구성원을 추가하고 각 변경 집합의 버전을 얻을 수있는 동일한 논리를하지 않았을 기대했다. – Aaron