Joh*_* MM 13 sql-server t-sql sql-server-2014
我是一名开发人员,而不是一名 DBA(我很担心这是在展示)。我正在尝试在我的家用计算机(名为John-PC)上使用 SQL Server 2014 Express 运行 Report Builder 3.0,但无法运行我的报告。
我无意中创建的用户/登录组合user = John-PC和login = John-PC\John。当我尝试删除条目时:
Drop Login John-PC\John
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
“-”附近的语法不正确。
我认为问题在于我的计算机名称中的连字符。
sys.server_principals但收到一个错误,我无法进行临时更改)。John_PC还是会产生许多我无法想象的其他问题?Ken*_*her 21
当名称中有特殊字符时,将 [] 放在其周围以让 SQL 知道它是一个标识符。这也是您管理特殊字符的方式。
所以在你的情况下
Drop Login [John-PC\John]
Run Code Online (Sandbox Code Playgroud)
Kin*_*hah 12
如果您只有一个登录名,那么手动引用它就[ ]可以了。如果你有很多人,那么你必须建立一个动态的SQL像下面progrmatically获得drop login [login_to_drop]从sys.server_principals使用QUOTENAME()TSQL
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql+= N'DROP LOGIN ' + QUOTENAME(name) + ';'
FROM sys.server_principals
WHERE name <> N'sa' -- do not drop SA
AND name NOT LIKE N'##%' -- special logins
AND name NOT LIKE N'NT [AS]%' -- special logins NT related
AND [type] IN ('S', 'U', 'G','R') -- S = SQL login | U = Windows login | G = Windows group | R = Server role
AND principal_id > 256
--AND name in () -- Filter to drop specific logins
AND name <> SUSER_SNAME(); -- This will avoid yourself for being dropped !
PRINT @sql;
-- once you verify that below logins will be dropped,
-- uncomment below line
-- EXEC master.sys.sp_executesql @sql;
Run Code Online (Sandbox Code Playgroud)
吸取教训,不要使用特殊字符..否则要准备好处理它们的痛苦:-)
| 归档时间: |
|
| 查看次数: |
3684 次 |
| 最近记录: |