| This post was kindly contributed by Heuristic Andrew - go there to comment and to read the full post. |
When using SAS to develop high-performance queries against remote SQL databases, it is helpful to see the exact ODBC messages that SAS passes to the driver. Sometimes the implicit SQL poorly translates a query, which can be optimized. To see these message, enable the SAS trace like this:
options sastrace=',,,d' sastraceloc=saslog nostsuffix;
However, when closing the SAS process, there can be a pop-up dialog window with the title “SAS Message Log” with entries like this:
ODBC: COMMIT performed on connection #6.
ODBC: COMMIT performed on connection #5.
ODBC: COMMIT performed on connection #4.
ODBC: COMMIT performed on connection #3.
ODBC: COMMIT performed on connection #2.
ODBC: COMMIT performed on connection #1.
ODBC: COMMIT performed on connection #0.
When running SAS interactively, this is a minor nuisance. When running SAS in an automated batch, this can be a serious problem because the dialog will wait indefinitely for human interaction, so the sas.exe process will never terminate.
This isn’t exactly a bug, but it can feel like it. Sadly, SAS provides no convenient options like these:
- Never show the SAS message pop-up dialog when the SAS editor has closed.
- Automatically close the pop-up dialog after 60 seconds of inactivity.
- Filter all traces with the text “ODBC commit.”
The SAS developer has these options:
- Disable the SAS trace.
- Send the SAS trace to a file like this:
options sastrace=',,,d' sastraceloc=file 'c:\sastest\mytrace.log' nostsuffix;
- Manually close the SAS Message Log whenever it appears.
- Use my Python script to automatically close the “SAS Message Log” dialog whenever it appears.
Tested on SAS 9.4M5 and Python 3.7 on Windows 10 and Windows Server 2008.
| This post was kindly contributed by Heuristic Andrew - go there to comment and to read the full post. |