2016-01-19 8 views
6

में WHOAMI के परिणाम डालें मेरे पास 2 कॉलम वाली एक तालिका है, जिसमें से एक मैं WHOAMI कमांड का परिणाम डालना चाहता हूं। की कोशिश की कर निम्नलिखित लेकिन मैं यह कॉलम की विभिन्न मात्रा के कारण काम नहीं करेगा अनुमान:एसक्यूएल सर्वर: तालिका

UPDATE tblName 
SET colName = (xp_cmdshell 'whoami.exe') 
WHERE id = 1 

उत्तर

3
DECLARE @t TABLE (Value VARCHAR(8000)) 

INSERT INTO @t 
EXEC sys.xp_cmdshell 'whoami' 

UPDATE tblName 
SET colName = 
    (
     SELECT TOP(1) Value 
     FROM @t 
     WHERE Value IS NOT NULL 
    )    
WHERE id = 1 
3

आप उपयोगकर्ता के लिए जो डेटाबेस में लॉग इन किया है (जो एक Windows या SQL लॉगइन हो सकता है चाहते हैं), तो आप इस्तेमाल कर सकते हैं SUSER_NAME() समारोह में बनाया बजाय

UPDATE tblName set colName = SUSER_NAME() WHERE id=1 

आप वास्तव में एसक्यूएल सर्वर प्रक्रिया (जो कि तुम क्या whoami.exe से प्राप्त होता है) चल रहा है कि सेवा खाते चाहते हैं, आप का उपयोग कर बंद बेहतर हो सकता है sys.dm_server_services देखें, जिसेसक्षम करने की आवश्यकता नहीं होगी(कुछ सुरक्षा जोखिम पैदा कर सकते हैं जो अगर यह ठीक से लॉक नहीं है) (ध्यान दें: इस एसक्यूएल सर्वर की आवश्यकता है कम से कम 2008R2 SP1):)

UPDATE tblName 
SET colName = (
    SELECT TOP 1 
     service_account 
    FROM sys.dm_server_services 
    WHERE servicename LIKE 'SQL Server (%') 
WHERE id=1 

अन्यथा

DECLARE @output TABLE (v varchar(200)) 

INSERT @output (v) exec xp_cmdshell 'whoami.exe' 

UPDATE tblName SET colName = (select top 1 * from @output) WHERE id=1 
+0

SUSER_NAME (केवल वापस लाता सा सभी कॉलम के बजाय – pee2pee

+0

यह आपको SQL सर्वर चला रहे सेवा खाते की बजाय वर्तमान उपयोगकर्ता देगा। अपडेट करने जा रहे हैं। –

+0

@ pee2pee, मैंने आपको कुछ अन्य विकल्प देने के लिए थोड़ा सा जवाब दिया है। मैं व्यक्तिगत रूप से 'dm_server_services' दृश्य के लिए जाऊंगा क्योंकि मैं आमतौर पर xp_cmdshell को किसी भी चीज़ में शामिल होने की चिंता नहीं करना चाहता हूं। –

संबंधित मुद्दे