我觉得这里的东西很直接。
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;