2009-11-04 53 views

回答

1

这是2005/2008的代码。对于2000年来说,你必须自己亲自登录注册表,因为它存储在我认为的其他地方。此外,您必须将其从表变量更改为实际的临时表。

享受。

Declare @Instances Table 
(InstanceName SysName, RegKey SysName, InstanceType Character Varying(50), 
Version Character Varying(4), Features National Character Varying(2000)) 

Insert Into @Instances(InstanceName, RegKey) 
Execute Master.dbo.xp_RegEnumValues N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\Microsoft SQL Server\Instance Names\SQL' 
Update @Instances Set InstanceType = 'SQL Server' Where InstanceType Is Null 

Insert Into @Instances(InstanceName, RegKey) 
Execute Master.dbo.xp_RegEnumValues N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\Microsoft SQL Server\Instance Names\RS' 
Update @Instances Set InstanceType = 'Reporting Services' Where InstanceType Is Null 

Insert Into @Instances(InstanceName, RegKey) 
Execute Master.dbo.xp_RegEnumValues N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\Microsoft SQL Server\Instance Names\OLAP' 
Update @Instances Set InstanceType = 'Analysis Services' Where InstanceType Is Null 

Declare 
@More Bit, @CRegKey SysName, @RegPath National Character Varying(2000), 
@Features National Character Varying(2000), @VersionString National Character Varying(500) 

Declare CInstance Cursor 
For 
Select RegKey From @Instances 

Open CInstance 
Set @More = 1 

While (@More = 1) 
Begin 
Fetch Next From CInstance Into @CRegKey 
If (@@Fetch_Status != 0) 
    Set @More = 0 
Else 
    Begin 
    Set @RegPath = N'Software\Microsoft\Microsoft SQL Server\' + @CRegKey + '\Setup' 

    Execute Master.dbo.xp_RegRead N'HKEY_LOCAL_MACHINE', @RegPath, N'FeatureList', @Features Output, 'no_output' 
    Execute Master.dbo.xp_RegRead N'HKEY_LOCAL_MACHINE', @RegPath, N'PatchLevel', @VersionString Output, 'no_output' 
    -- \' ignore this, it's just to get the formatting right 
    Update @Instances 
    Set 
    Features = @Features, 
    Version = (Case When Left(@VersionString, 1) = '9' Then '2005' 
        When Left(@VersionString, 2) = '10' Then '2008' 
        Else '????' End) 
    Where Current Of CInstance 
    End 
End  

Close CInstance 
Deallocate CInstance 

Update @Instances Set InstanceName = '(local)' Where InstanceName = 'MSSQLServer' 

Select InstanceName, InstanceType, Version, Features 
From @Instances