我有一个包含2列的表,其中一列我想插入WHOAMI
命令的结果。尝试执行以下操作,但由于列数不同,我认为它不起作用:
UPDATE tblName
SET colName = (xp_cmdshell 'whoami.exe')
WHERE id = 1
答案 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