내 컴퓨터 이름에 하이픈으로 인해 T-SQL 오류 발생 함께 Report Builder 3.0을 실행하려고하는데 보고서를 실행할

나는 DBA가 아닌 개발자입니다 (보여줍니다). 내 컴퓨터 ( John-PC) 에서 SQL Server 2014 Express와 함께 Report Builder 3.0을 실행하려고하는데 보고서를 실행할 수 없습니다.

실수로 user = John-PC및 의 사용자 / 로그인 콤보를 만들었습니다 login = John-PC\John. 다음을 사용하여 항목을 삭제하려고 할 때 :

Drop Login John-PC\John

오류가 발생합니다.

‘-‘근처의 구문이 잘못되었습니다.

문제는 내 컴퓨터 이름의 하이픈이라고 생각합니다.

  1. 구문 오류를 해결할 수있는 방법이 있습니까?
  2. 사용자를 변경하거나 삭제할 수있는 다른 방법이 있습니까 (드롭을 시도했지만 sys.server_principals임시 변경을 할 수 없다는 오류가 발생했습니다)
  3. 어떻게 든 Report Builder에 새로운 사용자 / 로그인 이름을 부여 할 수 있습니까?
  4. 위의 방법 중 어느 것도 없으면 내 컴퓨터 이름을 변경할 John_PC수 있습니까, 아니면 상상조차 할 수없는 다른 문제가 발생할 수 있습니까?


답변

이름에 특수 문자가 있으면 그 주위에 []를 두어 식별자가 SQL임을 알립니다. 특수 문자를 관리하는 방법이기도합니다.

그래서 당신의 경우

Drop Login [John-PC\John]

답변

당신은 단지 하나의 로그인이 있다면, 수동으로 인용 와 그것을 [ ]의지 작동합니다. 당신이 그들 중 많은 것을 가지고 있다면 tsql drop login [login_to_drop]sys.server_principals사용하여 progrmatically를 얻기 위해 아래와 같은 동적 SQL을 만들어야합니다QUOTENAME()

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;

교훈, 특수 문자를 사용하지 마십시오 .. 그렇지 않으면 고통을 처리 할 준비를하십시오 🙂