Bilgisayarımın adında tire işareti T-SQL hatasına neden oluyor


13

Ben bir geliştiriciyim, DBA değil (gösteriliyor, korkuyorum). Rapor Oluşturucu 3.0'ı SQL Server 2014 Express ile ev bilgisayarımda (adlandırılmış John-PC) çalıştırmaya çalışıyorum ve raporlarımı çalıştıramıyorum.

Yanlışlıkla kullanıcı / giriş combo yaratmıştır user = John-PCve login = John-PC\John. Girdiyi silmeye çalıştığımda:

Drop Login John-PC\John

Bir hata alıyorum:

Yanlış sözdizimi yanında '-'.

Sorun bilgisayarımın adının tire işareti olduğunu düşünüyorum.

  1. Sözdizimi hatasını gidermenin bir yolu var mı?
  2. Kullanıcı değiştirmek veya bırakmak için başka bir yolu var mı (bırakarak denedim sys.server_principalsama geçici değişiklikler yapamadı bir hata aldı).
  3. Rapor Oluşturucu'ya bir şekilde yeni bir kullanıcı / giriş adı verebilir miyim?
  4. Yukarıdakilerin hiçbiri değilse, bilgisayarımın adını, John_PChayal bile edemediğim bir dizi başka sorun yaratacak şekilde değiştirebilir miyim?

Yanıtlar:


21

Bir adda özel karakterler olduğunda, SQL'in bir tanımlayıcı olduğunu bildirmek için [] 'i etrafına koyun. Özel karakterleri de bu şekilde yönetirsiniz.

Yani senin durumunda

Drop Login [John-PC\John]

12

Sadece bir girişiniz varsa, manuel olarak alıntı yapmak [ ]işe yarayacaktır. Eğer onlardan çok var, o zaman progrmatically almak için aşağıdaki gibi dinamik bir sql oluşturmak zorunda drop login [login_to_drop]dan sys.server_principalskullanılarak 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;

Öğrenilen ders, özel karakterler kullanmayın .. başka biraz acı ile başa çıkmak için hazır olun :-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.