DB 운영상에 특정 조건을 정책으로 걸수가 있는데요.
예를 들어 프로시저나 테이블 생성 네이밍 규칙 등 입니다.
헌데, 특정 DB만을 건다던가 혹은 제외 하는 방법이 잘 안되네요.
아래 처럼 저는 2개 이상의 DB를 조건에서 제외 하고 싶습니다.
질문입니다.
연산자 IN 또는 NOT IN을 쓸때 값을 어떻게 줘야 할지요?
일반적으로 쿼리의 Where 절에서 사용하는 Not in ('이름','이름'..) 방식은 위와 같은 오류를 불러오네요.
배열 형태로 해야한다고 해서 Array('이름','이름'...)을 해도 안되더군요.
혹시나 싶어 DB 이름이 아닌 DB ID로 해도 마찬가지였습니다.
Not Like로 하면 잘 되는데, 이건 AND나 OR로 조건절을 추가하게 되면 이상하게 정책 적용이 안되는 문제가 있습니다.
문맥상으로는 IN이나 NOT IN을 이용하는 방법이 분명히 있을텐데.. 찾지를 못하겠네요.
조언 부탁드립니다.
Comment 2
-
쓸만한게없네(윤선식)
2013.04.19 16:50
-
쓸만한게없네(윤선식)
2013.04.19 16:56
일단 저는 잘 되는 듯 합니다만...
정 잘 안되시면, 아래 내용 편집해서 실행해 보세요.
Declare @condition_id int
EXEC msdb.dbo.sp_syspolicy_add_condition @name=N'예외DB설정', @description=N'', @facet=N'Database', @expression=N'<Operator>
<TypeClass>Bool</TypeClass>
<OpType>NOT_IN</OpType>
<Count>2</Count>
<Attribute>
<TypeClass>String</TypeClass>
<Name>Name</Name>
</Attribute>
<Function>
<TypeClass>Array</TypeClass>
<FunctionType>Array</FunctionType>
<ReturnType>Array</ReturnType>
<Count>2</Count>
<Constant>
<TypeClass>String</TypeClass>
<ObjType>System.String</ObjType>
<Value>AdventureWorks2012</Value>
</Constant>
<Constant>
<TypeClass>String</TypeClass>
<ObjType>System.String</ObjType>
<Value>msdb</Value>
</Constant>
</Function>
</Operator>', @is_name_condition=0, @obj_name=N'', @condition_id=@condition_id OUTPUT
Select @condition_id
GO
저 조건을 한 번에 처리하려고 하는 것보다는
두 개의 조건을 거는 것이 더 나을 수 있습니다.
저 경우엔 Array 함수로 감싸 주시면 되긴 할 텐데...
저 예제는 아니지만, 간단하게 보여드리면 아래와 같다능.