Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

Re^2: pass MS SQL server scripts into Win32::ODBC

by Anonymous Monk
on Jan 24, 2013 at 05:07 UTC ( #1015074=note: print w/replies, xml ) Need Help??

in reply to Re: pass MS SQL server scripts into Win32::ODBC
in thread pass MS SQL server scripts into Win32::ODBC

Thank you for your input, it is appreciated.

with Win32::ODBC, I am able to execute stored procedures and basic queries routinely. It wasn't until I had the need to run a prebuilt script file, where the problem arose.

after much research tonight, it appears that this module isn't built to handle it and it was suggested to use DBI and DBD:ODBC, as you have.

I did some testing tonight using the DBI DBD:ODBC combination in which I read the file in and prepare each line in my loop and then at file end issue the execute.

This produces errors on the prepare, "incorrect syntax near...", I then tried to execute each line after the prepare and still get similar errors.

I know the sql script is solid and working. I can run it from the management console of osql/sqlcmd without problems. I must be ordering something incorrectly, not sure. I have a good understanding of the both modules, but am better with Win32::ODBC, but it seems simple enough to pick up with the DBI

I looked for tests on Win32::ODBC, but didn't find anything in addition to the perdoc and info on CPAN.

The SQL script looks like this:

use db

set nocount on

declare @MRN varchar(255)

set @MRN = 'xxxxxxxx'


select distinct id as patientid, firstname, lastname

from person P join patient_iorg PI on id = personid

where OrganizationMRN = @MRN;

The error is either on the from or the where depending on where I position the execute statement..

  • Comment on Re^2: pass MS SQL server scripts into Win32::ODBC

Replies are listed 'Best First'.
Re^3: pass MS SQL server scripts into Win32::ODBC
by Corion (Pope) on Jan 24, 2013 at 07:46 UTC

    None of these statements are valid SQL:

    use db set nocount on declare @MRN varchar(255) set @MRN = 'xxxxxxxx' ;

    Most likely, they are interpreted by whatever command line shell you use to connect to your database, and they most likely only set up output parameters and template variables that will get replaced in the real SQL later. That functionality does not live in the ODBC component of the database driver, or the database driver.

    Either you shell out to the console and let it run the script, or you find out how to replicate the shell functionality with Perl.

Re^3: pass MS SQL server scripts into Win32::ODBC
by mje (Curate) on Jan 24, 2013 at 09:36 UTC

    Some of these statements are transact-SQL and cannot be used over ODBC in the way you are doing it. You could create a procedure over ODBC which can use t-sql statements.

    Of course, I'm presuming there is more to the script than what you posted as it is effectively just a select statement.

      Thank You Both.

      I didn't realize the limitation of ODBC and transact statements

      I appreciate the advise and comments/guidance

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1015074]
[marto]: good morning all
[Corion]: Hi marto!
[choroba]: Good morning!

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (10)
As of 2018-06-25 08:29 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (126 votes). Check out past polls.