這個問題在這里已經有了答案: SQL中的單引號和雙引號有什么區別? (7 個回答) 7 天前關閉。
我認為這里的東西非常直截了當。
DECLARE @NewUser varchar(100)
set @NewUser = "[domain\first.last]"
USE [master]
GO
/****** Object: Login [domain\first.last] Script Date: 3/15/2022 4:51:57 PM ******/
CREATE LOGIN [domain\first.last] FROM WINDOWS WITH DEFAULT_DATABASE=[adventureWorks], DEFAULT_LANGUAGE=[us_english]
GO
USE [adventureWorks]
GO
/****** Object: User [domain\first.last] Script Date: 3/15/2022 4:52:10 PM ******/
CREATE USER [domain\first.last] FOR LOGIN [domain\first.last] WITH DEFAULT_SCHEMA=[dbo]
GO
ALTER ROLE db_datareader ADD MEMBER [domain\first.last]
GO
我收到一個錯誤:
訊息 207,級別 16,狀態 1,第 3 行
無效的列名稱“[域\first.last]”。
我在這里的變數宣告做錯了什么?
uj5u.com熱心網友回復:
在 T-SQL 中,雙引號 ( ") 不是字串分隔符,它們用作識別符號(盡管大多數人更喜歡[square brackets])。對于字串分隔符,您需要使用單引號 ( '):
SET @NewUser = '[domain\first.last]';
但是,如果您希望以后能夠使用它,例如
DROP LOGIN @NewUser;
...其中許多命令不接受這樣的引數。您需要使用動態 SQL 構建它們:
DECLARE @newUser nvarchar(255) = N'domain\first.last';
DECLARE @sql nvarchar(max) = N'DROP LOGIN $l$;';
SET @sql = REPLACE(@sql, N'$l$', QUOTENAME(@newUser));
PRINT @sql;
-- EXEC sys.sp_executesql @sql;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/447367.html
上一篇:T-SQL簡單轉換
