在SQL Server中,如何添加新登录名、带参数的新用户



我觉得这里的东西很直接。

DECLARE @NewUser varchar(100)
set @NewUser = "[domainfirst.last]"
USE [master]
GO
/****** Object:  Login [domainfirst.last]    Script Date: 3/15/2022 4:51:57 PM ******/
CREATE LOGIN [domainfirst.last] FROM WINDOWS WITH DEFAULT_DATABASE=[adventureWorks], DEFAULT_LANGUAGE=[us_english]
GO

USE [adventureWorks]
GO

/****** Object:  User [domainfirst.last]    Script Date: 3/15/2022 4:52:10 PM ******/
CREATE USER [domainfirst.last] FOR LOGIN [domainfirst.last] WITH DEFAULT_SCHEMA=[dbo]
GO
ALTER ROLE db_datareader ADD MEMBER [domainfirst.last]
GO

我收到一个错误:

消息207,级别16,状态1,第3行
列名称'[domain\first.last]'无效。

我对这里的变量声明做错了什么?

在T-SQL中,双引号("(不是字符串分隔符,而是用作标识符(尽管大多数人更喜欢[square brackets](。对于字符串分隔符,您需要使用单引号('(:

SET @NewUser = '[domainfirst.last]';

但是,如果您希望以后能够使用它,例如

DROP LOGIN @NewUser;

其中许多命令不接受这样的参数。您需要使用动态SQL:来构建它们

DECLARE @newUser nvarchar(255) = N'domainfirst.last';
DECLARE @sql nvarchar(max) = N'DROP LOGIN $l$;';
SET @sql = REPLACE(@sql, N'$l$', QUOTENAME(@newUser));
PRINT @sql;
-- EXEC sys.sp_executesql @sql;

最新更新