ขีดกลางในชื่อคอมพิวเตอร์ของฉันทำให้เกิดข้อผิดพลาด T-SQL


13

ฉันเป็นนักพัฒนาไม่ใช่ DBA (ซึ่งกำลังแสดงอยู่ฉันกลัว) ฉันพยายามเรียกใช้ Report Builder 3.0 ด้วย SQL Server 2014 Express บนคอมพิวเตอร์ที่บ้านของฉัน (ชื่อJohn-PC) และไม่สามารถเรียกใช้รายงานของฉัน

ฉันตั้งใจสร้างคำสั่งผสมผู้ใช้ / การเข้าสู่ระบบของและuser = John-PC login = John-PC\Johnเมื่อฉันพยายามลบรายการด้วย:

Drop Login John-PC\John

ฉันได้รับข้อผิดพลาด:

ไวยากรณ์ไม่ถูกต้องใกล้กับ '-'

ฉันคิดว่าปัญหาคือเครื่องหมายขีดคั่นในชื่อคอมพิวเตอร์ของฉัน

  1. มีวิธีแก้ไขข้อผิดพลาดทางไวยากรณ์หรือไม่
  2. มีวิธีอื่นในการเปลี่ยนหรือลบผู้ใช้ (ฉันลองดรอปจากsys.server_principalsแต่ได้รับข้อผิดพลาดที่ไม่สามารถทำการเปลี่ยนแปลงเฉพาะกิจได้)
  3. ฉันสามารถให้ชื่อผู้ใช้ / ชื่อเข้าสู่ระบบใหม่กับ Report Builder ได้หรือไม่
  4. หากไม่มีการข้างต้นฉันสามารถเปลี่ยนชื่อคอมพิวเตอร์เป็นJohn_PCหรือจะสร้างโฮสต์ของปัญหาอื่น ๆ ที่ฉันไม่สามารถจินตนาการได้หรือไม่

คำตอบ:


21

เมื่อคุณมีอักขระพิเศษในชื่อให้ใส่ [] ไว้เพื่อแจ้งให้ SQL ทราบว่าเป็นตัวระบุ นี่คือวิธีที่คุณจัดการอักขระพิเศษ

ดังนั้นในกรณีของคุณ

Drop Login [John-PC\John]

12

หากคุณเพียงแค่มีการเข้าสู่ระบบแล้วด้วยตนเอง quotingกับ[ ]การทำงานจะ หากคุณมีหลายคนคุณจะต้องสร้าง sql dynamic ดังด้านล่างเพื่อรับผลdrop login [login_to_drop]จากการsys.server_principalsใช้QUOTENAME()tsql แบบ progrmatically

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;

เรียนรู้บทเรียนอย่าใช้ตัวอักษรพิเศษ .. เตรียมตัวให้พร้อมรับมือกับความเจ็บปวด :-)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.