1 package DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server;
5 use base qw/DBIx::Class::Storage::DBI/;
7 sub _prep_for_execute {
9 my ($op, $extra_bind, $ident, $args) = @_;
11 my ($sql, $bind) = $self->next::method (@_);
12 $sql .= ';SELECT SCOPE_IDENTITY()' if $op eq 'insert';
21 my ($rv, $sth, @bind) = $self->dbh_do($self->can('_dbh_execute'), @_);
22 if ($op eq 'insert') {
23 $self->{_scope_identity} = $sth->fetchrow_array;
27 return wantarray ? ($rv, $sth, @bind) : $rv;
30 sub last_insert_id { shift->{_scope_identity} }
32 sub sqlt_type { 'SQLServer' }
35 my ( $self, $opts ) = @_;
38 $self->{_sql_maker_opts} = { %$opts };
41 return { limit_dialect => 'Top', %{$self->{_sql_maker_opts}||{}} };
44 sub build_datetime_parser {
46 my $type = "DateTime::Format::Strptime";
48 $self->throw_exception("Couldn't load ${type}: $@") if $@;
49 return $type->new( pattern => '%F %T' );
58 DBIx::Class::Storage::DBI::ODBC::Microsoft_SQL_Server - Support specific
59 to Microsoft SQL Server over ODBC
63 This class implements support specific to Microsoft SQL Server over ODBC,
64 including auto-increment primary keys and SQL::Abstract::Limit dialect. It
65 is loaded automatically by by DBIx::Class::Storage::DBI::ODBC when it
66 detects a MSSQL back-end.
68 =head1 IMPLEMENTATION NOTES
70 Microsoft SQL Server supports three methods of retrieving the IDENTITY
71 value for inserted row: IDENT_CURRENT, @@IDENTITY, and SCOPE_IDENTITY().
72 SCOPE_IDENTITY is used here because it is the safest. However, it must
73 be called is the same execute statement, not just the same connection.
75 So, this implementation appends a SELECT SCOPE_IDENTITY() statement
76 onto each INSERT to accommodate that requirement.
84 =head2 build_datetime_parser
86 The resulting parser handles the MSSQL C<DATETIME> type, but is almost
87 certainly not sufficient for the other MSSQL 2008 date/time types.
91 Marc Mims C<< <marc@questright.com> >>
95 You may distribute this code under the same terms as Perl itself.