SQL Server:将WHOAMI的结果插入表

时间:2016-01-19 15:17:05

标签: sql-server sql-server-2008

我有一个包含2列的表,其中一列我想插入WHOAMI命令的结果。尝试执行以下操作,但由于列数不同,我认为它不起作用:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

如果您想要登录数据库的用户(可以是Windows或SQL登录),您可以使用内置的SUSER_NAME()功能

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

如果您真的想要运行SQL Server进程的服务帐户(这是您从whoami.exe获得的),那么您最好使用sys.dm_server_services视图,而不是要求启用xp_cmdshell(如果没有正确锁定,可能会带来一些安全风险)(注意:这至少需要SQL Server 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