टी-एसक्यूएल त्रुटि के कारण मेरे कंप्यूटर के नाम में हाइफ़न


13

मैं एक डेवलपर हूं, डीबीए नहीं (जो दिखा रहा है, मुझे डर है)। मैं अपने घर के कंप्यूटर (नाम John-PC) पर SQL Server 2014 एक्सप्रेस के साथ रिपोर्ट बिल्डर 3.0 चलाने की कोशिश कर रहा हूं और अपनी रिपोर्ट नहीं चला सकता।

मैंने गलती की एक उपयोगकर्ता / लॉगिन कॉम्बो बनाया user = John-PCऔर login = John-PC\John। जब मैं इसके साथ प्रविष्टि को हटाने का प्रयास करता हूं:

Drop Login John-PC\John

मुझे एक त्रुटि मिली:

आगे गलत वाक्य रचना '-'।

मुझे लगता है कि समस्या मेरे कंप्यूटर के नाम में हाइफ़न है।

  1. क्या सिंटैक्स त्रुटि के आसपास पाने का एक तरीका है?
  2. क्या उपयोगकर्ता को बदलने या छोड़ने का एक और तरीका है (मैंने छोड़ने की कोशिश की sys.server_principalsलेकिन एक त्रुटि मिली कि मैं तदर्थ परिवर्तन नहीं कर सकता)।
  3. क्या मैं रिपोर्ट बिल्डर को किसी तरह एक नया उपयोगकर्ता / लॉगिन नाम दे सकता हूं?
  4. यदि उपरोक्त में से कोई नहीं, तो क्या मैं अपने कंप्यूटर का नाम बदल सकता हूं John_PCया अन्य समस्याओं का एक मेजबान बनाऊंगा जिसकी मैं कल्पना भी नहीं कर सकता हूं?

जवाबों:


21

जब आपके पास पुट नाम के विशेष वर्ण होते हैं, तो एसक्यूएल को यह बताने के लिए उसके चारों ओर कि यह एक पहचानकर्ता है। यह भी है कि आप विशेष वर्णों का प्रबंधन कैसे करते हैं।

तो आपके मामले में

Drop Login [John-PC\John]

12

यदि आपके पास बस एक लॉगिन है, तो इसे मैन्युअल रूप से उद्धृत करना [ ]काम करेगा। यदि आपके पास उनमें से कई हैं तो आपको एक गतिशील एसक्यूएल का निर्माण करना होगा जैसे कि नीचे tsql का उपयोग करने drop login [login_to_drop]से सर्वसम्मति से प्राप्त करने के लिएsys.server_principalsQUOTENAME()

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;

सबक सीखा, विशेष पात्रों का उपयोग न करें .. और कुछ दर्द से निपटने के लिए तैयार रहें :-)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.