Tanda hubung pada nama komputer saya menyebabkan kesalahan T-SQL

13

Saya seorang pengembang, bukan DBA (yang menunjukkan, saya takut). Saya mencoba menjalankan Report Builder 3.0 dengan SQL Server 2014 Express di komputer rumah saya (bernama John-PC) dan tidak dapat menjalankan laporan saya.

Saya tidak sengaja membuat kombo pengguna / login dari user = John-PCdan login = John-PC\John. Ketika saya mencoba menghapus entri dengan:

Drop Login John-PC\John

Saya mendapatkan kesalahan:

Sintaksis salah dekat '-'.

Saya pikir masalahnya adalah tanda hubung pada nama komputer saya.

  1. Apakah ada cara untuk mengatasi kesalahan sintaks?
  2. Apakah ada cara lain untuk mengubah atau menjatuhkan pengguna (saya mencoba turun sys.server_principalstetapi menerima kesalahan sehingga saya tidak dapat melakukan perubahan ad hoc).
  3. Bisakah saya memberi Report Builder nama pengguna / login baru entah bagaimana?
  4. Jika tidak ada yang di atas, dapatkah saya mengubah nama komputer saya John_PCatau akankah itu membuat sejumlah masalah lain yang bahkan tidak dapat saya bayangkan?
John MM
sumber

Jawaban:

21

Ketika Anda memiliki karakter khusus dalam sebuah nama, letakkan [] di sekelilingnya untuk memberi tahu SQL bahwa itu adalah pengidentifikasi. Ini juga cara Anda mengelola karakter khusus.

Jadi dalam kasus Anda

Drop Login [John-PC\John]
Kenneth Fisher
sumber
12

Jika Anda hanya memiliki satu login, maka secara manual mengutip dengan [ ]kehendak pekerjaan. Jika Anda memiliki banyak dari mereka maka Anda harus membangun sql dinamis seperti di bawah ini untuk secara proaktif mendapatkan drop login [login_to_drop]dari sys.server_principalsmenggunakan 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;

Pelajaran, jangan gunakan karakter khusus .. lain bersiaplah untuk berurusan dengan mereka dengan rasa sakit :-)

Kin Shah
sumber