我正在尝试运行一个完全动态的更新语句来获取Cpu的数量,内核数,内存以及运行它的服务器的版本。我对版本号的部分在主数据库中运行存储过程,我只需要拉出Character_Value列,我可以获取版本和内部版本号以推入表中。
UPDATE DBA_STATS.dbo.HOSTS
SET CPUNUM = (SELECT (cpu_count / hyperthread_ratio) FROM master.sys.dm_os_sys_info),
CORENUM = (SELECT CASE
WHEN hyperthread_ratio = cpu_count
THEN cpu_count
WHEN (([cpu_count] - [hyperthread_ratio]) / ([cpu_count] / [hyperthread_ratio])*cpu_count) = 0
THEN cpu_count
ELSE (([cpu_count] - [hyperthread_ratio]) / ([cpu_count] / [hyperthread_ratio])*cpu_count)
END FROM sys.dm_os_sys_info),
MEMORY = (SELECT physical_memory_in_bytes/1073741824 FROM sys.dm_os_sys_info),
DOMAIN = (SELECT DEFAULT_DOMAIN()),
VERSION = (exec master.dbo.xp_msver 'WindowsVersion')
WHERE NAME = @@ServerName
我有一个错误显然是因为存储过程xp_msver给了我4列。我想要提取的是Character_Value列。有没有人知道如何实现这个目标?
答案 0 :(得分:1)
你可以这样做:
declare @xp_msver table ([Index] int, name sysname, internal_value int, character_value nvarchar(50));
declare @version nvarchar(50);
Insert Into @xp_msver Exec master.dbo.xp_msver 'WindowsVersion';
Select top(1) @version = character_value from @xp_msver Where name = 'WindowsVersion';