Udostępnij za pośrednictwem


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.