我需要检查SQL Server上是否已经存在特定的登录名,如果不存在,则需要添加它。
我找到了以下代码,用于将登录名实际添加到数据库中,但我想将其封装在一个IF语句中(以某种方式),以检查登录名是否首先存在。
CREATE LOGIN [myUsername] WITH PASSWORD=N'myPassword',
DEFAULT_LANGUAGE=[us_english],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF
GO
我知道我需要询问系统数据库,但不确定从哪里开始!
发布于 2009-09-04 14:01:49
来自here
If not Exists (select loginname from master.dbo.syslogins
where name = @loginName and dbname = 'PUBS')
Begin
Select @SqlStatement = 'CREATE LOGIN ' + QUOTENAME(@loginName) + '
FROM WINDOWS WITH DEFAULT_DATABASE=[PUBS], DEFAULT_LANGUAGE=[us_english]')
EXEC sp_executesql @SqlStatement
End
发布于 2009-12-22 17:35:57
在SQL Server 2005和更高版本中,有一种方法可以在不使用已弃用的syslogins视图的情况下执行此操作:
IF NOT EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = 'LoginName')
BEGIN
CREATE LOGIN [LoginName] WITH PASSWORD = N'password'
END
之所以使用server_principals视图而不是sql_logins,是因为后者不会列出Windows登录。
如果您需要在创建用户之前检查特定数据库中是否存在用户,则可以执行以下操作:
USE your_db_name
IF NOT EXISTS
(SELECT name
FROM sys.database_principals
WHERE name = 'Bob')
BEGIN
CREATE USER [Bob] FOR LOGIN [Bob]
END
发布于 2009-09-04 14:09:57
作为对此线程的一个小补充,通常您希望避免使用以sys.sys*开头的视图,因为微软包含它们只是为了向后兼容。对于您的代码,您可能应该使用sys.server_principals。这是假设您使用的是SQL 2005或更高版本。
https://stackoverflow.com/questions/1379437
复制相似问题