Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

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

by roboticus (Chancellor)
on Jan 24, 2013 at 02:02 UTC ( [id://1015059]=note: print w/replies, xml ) Need Help??


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

Knowing what the eror messages are might be helpful. But in any case, it should be achievable. Using DBI and DBD::ODBC I routinely do updates, stored procedure calls in MSSQL, so I expect that it should be easy enough with Win32::ODBC. You might try checking the tests for Win32::ODBC to see how the author does it.

...roboticus

When your only tool is a hammer, all problems look like your thumb.

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

Replies are listed 'Best First'.
Re^2: pass MS SQL server scripts into Win32::ODBC
by Anonymous Monk on Jan 24, 2013 at 05:07 UTC

    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..

      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.

      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?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1015059]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (8)
As of 2024-04-23 14:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found