Tôi không thể bình luận được nêu ra, vì vậy tôi phải thêm này như là một câu trả lời.
Tôi thích càng cụ thể càng tốt, đó là lý do tại sao tôi thích bao gồm loại chính. Đây là lý do tại sao tôi bỏ phiếu cho câu trả lời của Aaron.
Sử dụng DATABASE_PRINCIPAL_ID có thể cho kết quả không mong muốn nếu có một loại chính khác có cùng tên với vai trò mà bạn muốn thêm. Điều này là do DATABASE_PRINCIPAL_ID trả về số ID của một số chính trong cơ sở dữ liệu hiện tại, không dành riêng cho một hiệu trưởng với một loại vai trò cơ sở dữ liệu.
Giả sử bạn có người dùng có cùng tên với vai trò cơ sở dữ liệu. Trạng thái của tập lệnh của Yada sẽ cho biết thành công, nhưng nó sẽ không thêm vai trò vì đã có một tên là chính. Tuy nhiên, kịch bản của Aaron sẽ quay trở lại các lỗi sau:
User, group, or role 'name' already exists in the current database.
Tôi thà bắt vấn đề này từ rất sớm (ví dụ khi kịch bản được điều hành) so với sau này (ví dụ khi ứng dụng của tôi đang được sử dụng).
Đây là những gì tôi thường muốn sử dụng:
IF NOT EXISTS(SELECT NULL FROM sys.database_principals WHERE [name] = 'role_name' AND [type]='R')
BEGIN
-- add user;
END
Nếu tôi thực sự muốn để xử lý tình huống này và không hiển thị một lỗi, tôi có thể sử dụng một cái gì đó như thế này:
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
Vui lòng tham khảo liên kết này. Có lẽ điều tương tự bạn đang tìm kiếm http://stackoverflow.com/questions/1201160/how-do-i-determine-if-a-database-role-exists-in-sql-server – madatanic
Bản sao có thể có của [Cách thực hiện thế nào để tôi xác định nếu một vai trò cơ sở dữ liệu tồn tại trong SQL Server?] (https://stackoverflow.com/questions/1201160/how-do-i-determine-if-a-database-role-exists-in-sql-server) –