Udostępnij za pośrednictwem


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.

Zobacz także

Koncepcje