시도 사용자를 추가 시작합니다.
저는 가능한 한 구체적으로하고 싶은데, 이것이 내가 주체 유형을 선호하는 이유입니다. 이것이 내가 아론의 대답을 뽑은 이유입니다.
DATABASE_PRINCIPAL_ID를 사용하면 추가 할 역할과 이름이 같은 다른 주체 유형이있는 경우 예기치 않은 결과가 발생할 수 있습니다. 이는 DATABASE_PRINCIPAL_ID가 현재 데이터베이스의 주의 ID 번호를 반환하기 때문입니다. 데이터베이스 역할 유형이있는 보안 주체는 특별히 아닙니다.
데이터베이스 역할과 이름이 같은 사용자가 있다고합시다. Yada의 스크립트 상태는 성공을 나타낼 것이지만 그 이름이 이미 인이므로이 역할을 추가하지는 않습니다. 그러나 아론의 스크립트는 다음과 같은 오류 반환 :
User, group, or role 'name' already exists in the current database.
내가 오히려 초기에 (스크립트가 실행 예를 들어, 경우)이 문제를 잡을 것입니다 나중에 이상을 (예를 들어, 내 응용 프로그램이 사용되는 경우).
IF NOT EXISTS(SELECT NULL FROM sys.database_principals WHERE [name] = 'role_name' AND [type]='R')
BEGIN
-- add user;
END
정말 오류를 표시하지이 시나리오를 처리하고 싶은 경우에, I는 다음과 같이 사용할 수 있습니다 :
DECLARE @RoleName sysname,
@PrincipalType NVARCHAR(60);
SET @RoleName = 'role_name';
SET @PrincipalType = (SELECT type_desc FROM sys.database_principals WHERE [name] = @RoleName);
IF @PrincipalType IS NULL
BEGIN
-- Add user;
END
ELSE IF @PrincipalType <> 'DATABASE_ROLE'
BEGIN
--Deal with the issue as desired. Here we're printing out a warning. Important: The status will still indicate that the Query executed successfully when using PRINT to show warnings.
PRINT 'WARNING: The ' + @RoleName + ' database role was not created. A principal already exists in the database with a type of ' + @PrincipalType + '.';
END
이 링크를 참조하십시오. 아마도 당신이 찾고있는 똑같은 물건 http://stackoverflow.com/questions/1201160/how-do-i-determine-if-a-database-role-exists-in-sql-server – madatanic
가능한 복제본 데이터베이스 역할이 SQL Server에 있는지 확인합니까?] (https://stackoverflow.com/questions/1201160/how-do-i-determine-if-a-database-role-exists-in-sql-server) –