从系统存储过程中获取各个列

时间:2015-11-05 14:56:11

标签: sql-server stored-procedures

我正在尝试运行一个完全动态的更新语句来获取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列。有没有人知道如何实现这个目标?

1 个答案:

答案 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';