Łącznik w nazwie mojego komputera powodujący błąd T-SQL

13

Jestem programistą, a nie DBA (obawiam się, że pokazuje). Próbuję uruchomić program Report Builder 3.0 z SQL Server 2014 Express na moim komputerze domowym (o nazwie John-PC) i nie mogę uruchomić moich raportów.

Przypadkowo utworzyłem kombinację użytkownika / loginu dla user = John-PCi login = John-PC\John. Kiedy próbuję usunąć wpis za pomocą:

Drop Login John-PC\John

Dostaję błąd:

Niepoprawna składnia w pobliżu '-'.

Myślę, że problemem jest myślnik w nazwie mojego komputera.

  1. Czy istnieje sposób obejścia błędu składniowego?
  2. Czy istnieje inny sposób zmiany lub upuszczenia użytkownika (próbowałem zrezygnować z, sys.server_principalsale otrzymałem błąd, że nie mogłem dokonać zmian ad hoc).
  3. Czy mogę w jakiś sposób nadać Konstruktorowi raportów nową nazwę użytkownika / login?
  4. Jeśli żadne z powyższych nie może, mogę zmienić nazwę mojego komputera na John_PClub czy spowoduje to szereg innych problemów, których nawet nie wyobrażam sobie?
John MM
źródło

Odpowiedzi:

21

Gdy masz w nazwie znaki specjalne, umieść wokół niej [], aby poinformować SQL, że jest to identyfikator. W ten sposób również zarządzasz postaciami specjalnymi.

Więc w twoim przypadku

Drop Login [John-PC\John]
Kenneth Fisher
źródło
12

Jeśli masz tylko jeden login, ręczne cytowanie go [ ]będzie działać. Jeśli masz wiele z nich potem trzeba zbudować sql dynamiczny jak poniżej progrmatically uzyskać drop login [login_to_drop]z sys.server_principalsużyciem 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;

Wyciągnięta lekcja, nie używaj znaków specjalnych ... w przeciwnym razie bądź przygotowany na poradzenie sobie z nimi z bólem :-)

Kin Shah
źródło