use DBIx::Declare MyDB => { data_source => "dbi:ODBC:Driver=SQL Server;Server=Some;Database=MyDB", type => 'MSSQL', user => '...', pass => '....', attr => { 'RaiseError' => 0, 'AutoCommit' => 1, LongReadLen => 65536 }, methods => { GetSiteName => { return => '$$', # assuming CREATE PROCEDURE GetSiteName(@Id int, @Name varchar(100) OUTPUT) ... }, FetchSiteDetails => { return => '_%', }, FetchSiteList => '@%', InsertSite => '@%', FetchFreeSiteList => { sql => 'SELECT Id, Name FROM Sites WHERE Cost = 0 and Name like '%'+? ORDER BY Name', args => ['Name'], defaults => {Name => ''}, return => '@%', } } }; my $db = MyDB->new(); my $site_name = $db->GetSiteName( $id); my $details = $db-> FetchSiteDetails( -SiteId => $id); print "$details->{Name} costs $details->{Cost}\n"; my @free_sites = $db->FetchFreeSiteList(); my @free_sites_starting_a = $db->FetchFreeSiteList(-Name => 'a');