deneyin kullanıcı ekleyin BEGIN.
Mümkün olduğu kadar spesifik olmayı severim, bu yüzden asıl türü kullanmayı tercih ederim. Bu yüzden Aaron'un cevabına oy verdim.
DATABASE_PRINCIPAL_ID'yi kullanmak, eklemek istediğiniz rolle aynı ada sahip başka bir temel tür varsa, beklenmedik sonuçlar verebilir. Bunun nedeni, DATABASE_PRINCIPAL_ID dosyasının, özellikle bir veritabanı rolü türünde bir yönetici için değil, geçerli veritabanında ana kimlik numarasını döndürmesidir.
Veritabanı rolü ile aynı ada sahip bir kullanıcınız olduğunu varsayalım. Yada komut dosyasının durumu başarıya işaret eder, ancak bu adla zaten bir ana olduğu için bu rol eklenmez. Ancak, Aaron komut aşağıdaki hatayı döndürür:
User, group, or role 'name' already exists in the current database.
Doğrusu erken (script çalıştırıldığında örn olduğunda) bu sorunu yakalamak istiyorum sonra daha (örneğin benim app kullanıldığında).
IF NOT EXISTS(SELECT NULL FROM sys.database_principals WHERE [name] = 'role_name' AND [type]='R')
BEGIN
-- add user;
END
Gerçekten bir hata göstermiyor bu senaryoyu işleyebilir ve isterseniz, böyle bir şey kullanabilirsiniz:
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
gibi olacaktır. Lütfen bu bağlantıya bakınız. Muhtemelen aynı şeyi arıyorsun http://stackoverflow.com/questions/1201160/how-do-i-determine-if-a-database-role-exists-in-sql-server – madatanic
Olası kopyası SQL Server'da bir veritabanı rolü olup olmadığını belirleyebilir miyim?] (https://stackoverflow.com/questions/1201160/how-do-i-determine-if-a-database-role-exists-in-sql-server) –