我计算机名称中的连字符导致T-SQL错误


13

我是开发人员,而不是DBA(恐怕正在显示)。我试图在我的家用计算机(名为John-PC)上运行带有SQL Server 2014 Express的Report Builder 3.0,但无法运行我的报告。

我无意中创建的用户/登录组合user = John-PClogin = John-PC\John。当我尝试通过以下方式删除条目时:

Drop Login John-PC\John

我收到一个错误:

'-'附近的语法不正确。

我认为问题是计算机名称中的连字符。

  1. 有没有一种方法可以解决语法错误?
  2. 还有另一种更改或删除用户的方法(我尝试从中删除,sys.server_principals但收到一个我无法进行临时更改的错误)。
  3. 我可以以某种方式为Report Builder提供一个新的用户名/登录名吗?
  4. 如果以上都不是,我可以John_PC将计算机的名称更改为还是会导致很多其他我无法想象的问题?

Answers:


21

如果名称中包含特殊字符,请在[]前后加上空格,以使SQL知道它是一个标识符。这也是管理特殊字符的方式。

所以你的情况

Drop Login [John-PC\John]

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;

吸取的教训,不要使用特殊字符..否则,请准备好以痛苦的方式对待它们:-)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.