SQL Server Central is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
Search:  
 
 

Working with the Registry

By Dinesh Asanka, 2004/03/23

Total article views: 8146 | Views in the last 30 days: 22

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

By Dinesh Asanka, 2004/03/23

Total article views: 8146 | Views in the last 30 days: 22
Your response
 
 
Related tags

Miscellaneous    
T-SQL    
 
Like this? Try these...

Save Your Password

By Dinesh Asanka | Category: Security
| 11,902 reads
Already registered?  

Free registration required

To read the rest of this article, and access thousands of other articles, we ask you to register on the site and subscribe to our newsletters.

Register

E-mail address:
Password:
Password (confirm):

  

Subscriptions

We ask you to register on the site and subscribe to our newsletters. Subscribing to our newsletters gets you:

  • ALL of our content (thousands of articles, scripts, and forum postings)
  • A daily newsletter (example)
  • A weekly news round up (example)
  • The opportunity to ask and answer questions in our forums
  • A daily Question of the Day to test and help you increase your knowledge of SQL Server.

We ask that you give the newsletter a try for a week. Over 200,000 SQL Server Professionals a day find it entertaining and useful. If not, you are welcome to unsubscribe at anytime.

Steve Jones
Editor, SQLServerCentral.com