Van*_*nel 42 sql-server sql-server-2012
我正在使用 SQL Server 2012。我想在将用户添加到数据库之前检查用户是否存在。
这是我测试过的:
USE [MyDatabase]
GO
IF NOT EXISTS (SELECT name
FROM [sys].[server_principals]
WHERE name = N'IIS APPPOOL\MyWebApi AppPool')
Begin
CREATE USER [IIS APPPOOL\MyWebApi AppPool]
FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO
Run Code Online (Sandbox Code Playgroud)
但是,SELECT name FROM [sys].[server_principals]如果该用户存在于MyDatabase.
如何检查用户是否存在于MyDatabase?
Chr*_*ich 38
使用sys.database_principals代替sys.server_principals。
所以最终的查询看起来像这样(考虑到用户过滤器):
USE [MyDatabase]
GO
IF NOT EXISTS (SELECT [name]
FROM [sys].[database_principals]
WHERE [type] = N'S' AND [name] = N'IIS APPPOOL\MyWebApi AppPool')
Begin
CREATE USER [IIS APPPOOL\MyWebApi AppPool]
FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO
Run Code Online (Sandbox Code Playgroud)
spa*_*dba 24
我将 SUSER_ID() 和 USER_ID() 用于此类事情:
-- Check SQL Server Login
IF SUSER_ID('SomeLogin') IS NULL
CREATE LOGIN SomeLogin WITH PASSWORD = 'SomePassword';
-- Check database user
IF USER_ID('SomeUser') IS NULL
CREATE USER SomeUser FOR LOGIN SomeLogin;
Run Code Online (Sandbox Code Playgroud)
Moi*_*ala 15
进一步细化,因为这将使阅读更佳
USE [MyDatabase]
GO
IF DATABASE_PRINCIPAL_ID('IIS APPPOOL\MyWebApi AppPool') IS NULL
BEGIN
CREATE USER [IIS APPPOOL\MyWebApi AppPool]
FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
END
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99638 次 |
| 最近记录: |