Przetwarzanie instrukcji, które generują wiadomości
Transact-SQL Ustaw opcje instrukcja statystyki czasu i statystyki we/wy używane są informacje, które ułatwia diagnozowanie długotrwałych kwerend.We wcześniejszych wersjach SQL Server również obsługę opcji SHOWPLAN do analizowania planów kwerend.Aplikacji ODBC można zestaw te opcje, wykonując następujące instrukcje:
SQLExecDirect(hstmt, "SET SHOWPLAN ON", SQL_NTS);
SQLExecDirect(hstmt, "SET STATISTICS TIME ON", SQL_NTS90
);
SQLExecDirect(hstmt, "SET STATISTICS IO ON", SQL_NTS);
Gdy statystyki USTAWIĆ czas lub ustaw SHOWPLAN na, SQLExecute i SQLExecDirect zwraca wartość SQL_SUCCESS_WITH_INFO i w tym momencie pobrać wyjściowego SHOWPLAN lub czas statystyki wywołując aplikacji SQLGetDiagRec aż zwróci ona SQL_NO_DATA.Każdy wiersz danych SHOWPLAN wróci w formacie:
szSqlState="01000", *pfNativeError=6223,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
Table Scan"
SQL Server w wersja 7.0 zastępuje opcję SHOWPLAN z SHOWPLAN_ALL i SHOWPLAN_TEXT, które zwracają wyjściowe jako zestaw wyników, nie zestaw komunikatów.
Każdy wiersz statystyki czasu wróci w formacie:
szSqlState="01000", *pfNativeError= 3613,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
SQL Server Parse and Compile Time: cpu time = 0 ms."
Wyjście USTAWIĆ statystyki we/wy nie jest dostępny do końca zestaw wyników.Aby uzyskać wyjście, IO statystyki wywołań aplikacji SQLGetDiagRec na czas SQLFetch lub SQLFetchScroll zwraca wartość SQL_NO_DATA.W formacie wróci wyjścia statystyki we/wy:
szSqlState="01000", *pfNativeError= 3615,
szErrorMsg="[Microsoft][ SQL Server Native Client][SQL Server]
Table: testshow scan count 1, logical reads: 1,
physical reads: 0."
Za pomocą instrukcji DBCC
DBCC instrukcji zwrócić dane jako wiadomości nie zestawów wyników.SQLExecDirect lub SQLExecute zwraca wartość SQL_SUCCESS_WITH_INFO i aplikacja pobiera dane wyjściowe, wywołując SQLGetDiagRec aż zwróci ona SQL_NO_DATA.
Na przykład następująca instrukcja zwraca wartość SQL_SUCCESS_WITH_INFO:
SQLExecDirect(hstmt, "DBCC CHECKTABLE(Authors)", SQL_NTS);
Wzywa do SQLGetDiagRec zwrotu:
szSqlState = "01000", *pfNativeError = 2536,
szErrorMsg="[Microsoft][ SQL Server Native Client][SQL Server]
Checking authors"
szSqlState = "01000", *pfNativeError = 2579,
szErrorMsg="[Microsoft][ SQL Server Native Client][SQL Server]
The total number of data pages in this table is 1."
szSqlState = "01000", *pfNativeError = 7929,
szErrorMsg="[Microsoft][ SQL Server Native Client][SQL Server]
Table has 23 data rows."
szSqlState = "01000", *pfNativeError = 2528
szErrorMsg="[Microsoft][ SQL Server Native Client][SQL Server]
DBCC execution completed. If DBCC printed error messages,
see your System Administrator."
Drukuj i instrukcji RAISERROR
Transact-SQLInstrukcje drukowania i RAISERROR również zwracać dane przez wywołanie SQLGetDiagRec.Instrukcje drukowania spowodować wykonanie instrukcja języka SQL zwraca wartość SQL_SUCCESS_WITH_INFO i kolejne wywołanie SQLGetDiagRec zwraca SQLState z 01000.RAISERROR z ważności dziesięć lub niższej działa tak samo jak Drukuj.RAISERROR z ważności 11 lub wyższej powoduje wykonać zwraca wartość SQL_ERROR i kolejne wywołanie SQLGetDiagRec zwraca SQLState 42000.Na przykład następująca instrukcja zwraca wartość SQL_SUCCESS_WITH_INFO:
SQLExecDirect (hstmt, "PRINT 'Some message' ", SQL_NTS);
Wywołanie SQLGetDiagRec zwraca:
szSQLState = "01000", *pfNative Error = 0,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
Some message"
Następująca instrukcja zwraca wartość SQL_SUCCESS_WITH_INFO:
SQLExecDirect (hstmt, "RAISERROR ('Sample error 1.', 10, -1)",
SQL_NTS)
Wywołanie SQLGetDiagRec zwraca:
szSQLState = "01000", *pfNative Error = 50000,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
Sample error 1."
Następująca instrukcja zwraca wartość SQL_ERROR:
SQLExecDirect (hstmt, "RAISERROR ('Sample error 2.', 11, -1)", SQL_NTS)
Wywołanie SQLGetDiagRec zwraca:
szSQLState = "42000", *pfNative Error = 50000,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
Sample error 2."
Chronometraż telefonicznej SQLGetDiagRec jest krytyczne, gdy wyjście z instrukcji wydruku lub RAISERROR znajduje się zestaw wyników.Wywołanie SQLGetDiagRec pobrać wydruku lub RAISERROR wyjściowy musi nastąpić niezwłocznie po instrukcja, która odbiera wartość SQL_ERROR lub wartość SQL_SUCCESS_WITH_INFO.Jest to prosta, gdy tylko jeden instrukcja języka SQL jest wykonywany w powyższych przykładach.W takich przypadkach wywołanie SQLExecDirect lub SQLExecute zwraca wartość SQL_ERROR lub wartość SQL_SUCCESS_WITH_INFO i SQLGetDiagRec można następnie wywoływana.Jest mniej proste gdy kodowania pętli do obsługi wyjścia partia instrukcji SQL lub podczas wykonywania SQL Server przechowywane procedury.
W takim przypadek SQL Server zwraca zestaw wyników dla każdej instrukcja SELECT, wykonywane w partia lub procedura składowana.Jeśli partia lub procedura zawiera instrukcje drukowania lub RAISERROR danych wyjściowych dla tych jest z przeplotem z zestawów wyników instrukcja SELECT.Jeśli pierwsza instrukcja w partia lub procedura jest drukowanie lub RAISERROR, SQLExecute lub SQLExecDirect zwraca wartość SQL_SUCCESS_WITH_INFO lub wartość SQL_ERROR, a aplikacja musi wywołać SQLGetDiagRec aż zwróci ona SQL_NO_DATA do pobierania informacji wydruku lub RAISERROR.
If the PRINT or RAISERROR statement comes after an SQL statement (such as a SELECT statement), then the PRINT or RAISERROR information is returned when SQLMoreResultspositions on the result set containing the error.SQLMoreResults zwraca wartość SQL_SUCCESS_WITH_INFO lub wartość SQL_ERROR w zależności od ważności wiadomości.Wiadomości są pobierane przez wywołanie SQLGetDiagRec aż zwróci ona SQL_NO_DATA.