C# Tutorials and offshore development in India
    Tutorials   Resources   Forum   Reviews   Communities   Interview   Jobs   Projects   Training   Your Ad Here    
Silverlight Games | Mentor | Code Converter | Articles | Code Factory | Computer Jokes | Members | Peer Appraisal | IT Companies | Bookmarks | Polls | Revenue Sharing | Lobby | Gift Shop |


Prizes & Awards
My Profile



Active Members
TodayLast 7 Days more...






Resources » Articles » Databases »

Accessing Registry from SQLServer


Posted Date: 04 Jun 2004    Resource Type: Articles    Category: Databases
Author: PPG Dinesh AsankaMember Level: Bronze    
Rating: 1 out of 5Points: 7



Working with the Registry

Introduction

I was looking for a function which will return me the country list. I found that list if countries in the registry. List of the countries resides in the  SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\. Therefore My task was reduced to read this registry. But unfortunately, I found that there are no functions documented for the registry functions. When I was looking for more information, I found a German Site which gives the syntax of the registry functions (thanks to Frank Kalis). So I decided to produce this short article in order to make my finds useful to others.

Read the Registry

    Syntax

    EXECUTE master..xp_regread 'hKey','Key Value','String Value',@outvar OUTPUT   
    Parameters
    hKey    
                Identifies a currently open key or any of the following predefined reserved handle values:
                HKEY_CLASSES_ROOT
                HKEY_CURRENT_USER
                HKEY_LOCAL_MACHINE
                HKEY_USERS

                The enumerated values are associated with the key identified by hKey.
Key Value :      Key value which you want to read
String Value : String Value which you want to read
outvar: varchar variable in which output will be stored.

Example:

               DECLARE @datapath varchar(255)
                EXEC master..xp_regread
                'HKEY_LOCAL_MACHINE',
                'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion',
                'RegisteredOwner',
                @datapath OUTPUT
                PRINT @datapath

Write to the Registry

    Syntax

    EXECUTE master..xp_regwrite 'hKey','Key Name','String Value','Data type','Value to write'
    Parameters
    hKey    :         Identifies a currently open key or any of the following predefined reserved handle values:
Key Name :      Key name which you want to read
String Value : String Value which you want to read
Data Type :
            REG_SZ  A null-terminated string. It will be a Unicode or ANSI string, depending on whether you use the Unicode or ANSI functions.          
             REG_BINARY Binary data in any form.
             REG_DWORD    A 32-bit number.
 

Example:

              EXEC master..xp_regwrite
                                        'HKEY_LOCAL_MACHINE',
                                        'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion',
                                        'RegisteredOwner',
                                        'REG_SZ',
                                        'DINESH'


Delete Registry String

    Syntax

    EXECUTE master..xp_regdeletevalue 'hKey','Key Name','String Value'
    Parameters
    hKey     :        Identifies a currently open key or any of the following predefined reserved handle values:
Key Name :      Key name which you want to delete
String Value : String Value which you want to delete
Example:
              EXEC master..xp_regdeletevalue
                                        'HKEY_LOCAL_MACHINE',
                                        'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion',
                                        'RegisteredOwner',

Delete Registry Key

    Syntax

    EXECUTE master..xp_regdeletekey 'hKey','Key Name'
    Parameters
    hKey     :      Identifies a currently open key or any of the following predefined reserved handle values:
Key Value :      Key value which you want to delete

Example:

              EXEC master..xp_regdeletevalue
                                        'HKEY_LOCAL_MACHINE',
                                        'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion'


Reading all the Registry Keys under the given Registry Key

    Syntax

    EXECUTE master..xp_regenumkeys 'hKey','Key Name'
    Parameters
    hKey      :       Identifies a currently open key or any of the following predefined reserved handle values:
Key Name :      Key name which you want to read

Example:

              EXEC master..xp_regenumkeys
                                        'HKEY_LOCAL_MACHINE',
                                        'SOFTWARE\Microsoft\MSSQLServer\Providers'


Out put will be

ADSDSOObject
DB2OLEDB
Microsoft.Jet.OLEDB.4.0
MSDAORA
MSDASQL
MSIDXS
MSQLImpProv
MSSEARCHSQL
SQLOLEDB

Reading all the Registry Values under the given Registry Key

    Syntax

    EXECUTE master..xp_regenumvalues 'hKey','Key Name'
    Parameters
    hKey      :      Identifies a currently open key or any of the following predefined reserved handle values:
Key Name :      Key name which you want to read
Example:

              EXEC master..xp_regenumvalues
                                         'HKEY_LOCAL_MACHINE',
                                        'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\Parameters'


Out put will be

Value
Data
SQLArg0
-dC:\Program Files\Microsoft SQL Server\MSSQL\data\master.mdf
SQLArg1
-eC:\Program Files\Microsoft SQL Server\MSSQL\log\ERRORLOG
 
SQLArg2
-lC:\Program Files\Microsoft SQL Server\MSSQL\data\mastlog.ldf
 
Implementation

Now it's time to use the above knowledge into practice. Let's try to get the country list from the registry. Following script can be used for that.

DECLARE @trenutniRed int
DECLARE @outputvar nvarchar(255)
DECLARE @countryKey nvarchar(150)
DECLARE @MasterKey nvarchar(150)
Set @MasterKey = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\'
Create table #CID ( i int)
Create table #CNAME ( CountryName nvarchar(255))

insert into #CID EXEC master..xp_regenumkeys
'HKEY_LOCAL_MACHINE',
@MasterKey

DECLARE SysKursor INSENSITIVE SCROLL CURSOR
FOR SELECT i FROM #CID
FOR READ ONLY
OPEN SysKursor
FETCH NEXT FROM SysKursor INTO @trenutniRed

WHILE @@Fetch_Status = 0
BEGIN
Set @countryKey = @MasterKey + RTRIM(LTRIM(CAST( @trenutniRed as nvarchar(15))))

EXEC master..xp_regread
'HKEY_LOCAL_MACHINE',
@countryKey,
'Name',
@outputvar OUTPUT

Insert into #CNAME Values ( @outputvar)
FETCH NEXT FROM SysKursor INTO @trenutniRed

END

CLOSE SysKursor
DEALLOCATE SysKursor

Select * from #CNAME

drop table #CID
drop table #CNAME



Responses

Author: critic    04 Jun 2004Member Level: Bronze   Points : 0
This is one of the good articles that came up these days. We like to see more contributions from you.

Great job Dinesh.


Feedbacks      
Popular Tags   What are tags ?   Search Tags  
Sign In to add tags.
(No tags found.)

Post Feedback


This is a strictly moderated forum. Only approved messages will appear in the site. Please use 'Spell Check' in Google toolbar before you submit.
You must Sign In to post a response.
Next Resource: How to replace cursors with a trick:)?
Previous Resource: Benefits of using Stored Procedures
Return to Discussion Resource Index
Post New Resource
Category: Databases


Post resources and earn money!
 
More Resources



dotNet Slackers

About Us    Contact Us    Privacy Policy    Terms Of Use