Instrukcje przetwarzania, które służy do generowania komunikatów
The Transact-SQL zestaw instrukcja options STATISTICS czas and STATISTICS IO are used to get information that aids in diagnosing long-running queries. We wcześniejszych wersjach SQL Server również obsługują opcję plan wykonania do analizowania planów kwerend. Aplikacji ODBC 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);
Kiedy zestaw STATISTICS czas lub plan wykonania zestaw to ON, SQLExecute and SQLExecDirect powrócić SQL_SUCCESS_WITH_INFO i, w tym momencie aplikacja może pobierać wyjścia czas plan wykonania lub STATISTICS wywołując SQLGetDiagRec aż zwraca SQL_NO_DATA.Każdy wiersz danych plan wykonania 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ępowany opcji plan wykonania plan wykonania_ALL i plan wykonania_TEXT, które zwracają dane wyjściowe jako zestaw wyników, nie zestaw komunikatów.
Każdy wiersz STATISTICS czas 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."
Dane wyjściowe zestaw IO statystyka nie jest dostępny do końca zestaw wyników.Aby uzyskać dane wyjściowe, Statystyka IO wywołania aplikacji SQLGetDiagRec w czasie SQLFetch or SQLFetchScroll Zwraca SQL_NO_DATA. Wynik operacji We/Wy STATISTICS wróci w formacie:
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 ich dane są zwracane jako wiadomości, nie zestawów wyników.SQLExecDirect or SQLExecute zwrócić SQL_SUCCESS_WITH_INFO, a aplikacja pobiera dane wyjściowe, wywołując SQLGetDiagRec aż zwraca SQL_NO_DATA.
Na przykład następująca instrukcja zwraca SQL_SUCCESS_WITH_INFO:
SQLExecDirect(hstmt, "DBCC CHECKTABLE(Authors)", SQL_NTS);
Wywołania SQLGetDiagRec return:
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."
Za pomocą PRINT i instrukcji RAISERROR
Transact-SQL Instrukcje PRINT i RAISERROR również dane zwracane przez wywołanie SQLGetDiagRec.Instrukcje drukowania spowodować wykonanie instrukcja języka SQL do zwracania SQL_SUCCESS_WITH_INFO i kolejne wywołania SQLGetDiagRec z zwraca wartośćSQLState 01000.RAISERROR z wskaźnik ważności dla 10 lub niższym działa tak samo, jak PRINT.RAISERROR z wskaźnik ważności, 11 lub wyższej powoduje, że wykonać do zwracania SQL_ERROR i kolejne wywołania SQLGetDiagRec returns SQLState 42000.Na przykład następująca instrukcja zwraca SQL_SUCCESS_WITH_INFO:
SQLExecDirect (hstmt, "PRINT 'Some message' ", SQL_NTS);
Wywołanie SQLGetDiagRec returns:
szSQLState = "01000", *pfNative Error = 0,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
Some message"
Następująca instrukcja zwraca SQL_SUCCESS_WITH_INFO:
SQLExecDirect (hstmt, "RAISERROR ('Sample error 1.', 10, -1)",
SQL_NTS)
Wywołanie SQLGetDiagRec returns:
szSQLState = "01000", *pfNative Error = 50000,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
Sample error 1."
Następująca instrukcja zwraca SQL_ERROR:
SQLExecDirect (hstmt, "RAISERROR ('Sample error 2.', 11, -1)", SQL_NTS)
Wywołanie SQLGetDiagRec returns:
szSQLState = "42000", *pfNative Error = 50000,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
Sample error 2."
W czasie telefonicznej SQLGetDiagRec ma podstawowe znaczenie, gdy dane wyjściowe PRINT lub RAISERROR instrukcji znajduje się zestaw wyników.Wywołanie SQLGetDiagRec w celu pobrania danych wyjściowych PRINT lub RAISERROR muszą być wykonane natychmiast po instrukcja, która odbiera SQL_ERROR lub SQL_SUCCESS_WITH_INFO.Jest to prosta, gdy jest wykonywane tylko z jednej instrukcja języka SQL, jak w przykładach powyżej.W takich przypadkach wywołanie SQLExecDirect or SQLExecute zwraca SQL_ERROR lub SQL_SUCCESS_WITH_INFO i SQLGetDiagRec może następnie zostać wywołany.Jest mniej proste podczas kodowania pętli do obsługi wyjścia partia instrukcji SQL lub podczas wykonywania SQL Server procedury przechowywane.
W takim przypadek SQL Server Zwraca zestaw wyników dla każdej instrukcja SELECT, wykonywane w wsadowego lub procedura przechowywana. Jeśli partia lub procedura zawiera PRINT lub RAISERROR instrukcja, dane wyjściowe do nich jest z przeplotem z zestawów wyników instrukcja SELECT.Jeśli jest pierwszą instrukcją w procedury wsadowej lub PRINT lub RAISERROR, SQLExecute or SQLExecDirect zwraca SQL_SUCCESS_WITH_INFO lub SQL_ERROR, a aplikacja musi wywołać SQLGetDiagRec aż zwraca SQL_NO_DATA do pobierania informacji PRINT 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 SQL_SUCCESS_WITH_INFO lub SQL_ERROR w zależności od ważności wiadomości.Wiadomości są pobierane przez wywołanie SQLGetDiagRec aż zwraca SQL_NO_DATA.