2009-11-04 50 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