Aracılığıyla paylaş


İletileri oluşturmak deyimleri işleme

Transact-SQLset bildirimi seçenekleri STATISTICS GÇ ve İstatistikler zaman uzun süre çalışan sorguları tanılama AIDS bilgi almak için kullanılır. Önceki SQL Serversorgu planları çözümlemek için showplan seçeneği de destek. Bir odbc uygulaması, aşağıdaki deyimleri çalıştırarak bu seçenekleri ayarlayabilirsiniz:

SQLExecDirect(hstmt, "SET SHOWPLAN ON", SQL_NTS);
SQLExecDirect(hstmt, "SET STATISTICS TIME ON", SQL_NTS90
);
SQLExecDirect(hstmt, "SET STATISTICS IO ON", SQL_NTS);

SQLExecDirect(hstmt, "SET SHOWPLAN ON", SQL_NTS);
SQLExecDirect(hstmt, "SET STATISTICS TIME ON", SQL_NTS90
);
SQLExecDirect(hstmt, "SET STATISTICS IO ON", SQL_NTS);

set STATISTICS zaman veya showplan set on olduğunda SQLExecute ve SQLExecDirect SQL_SUCCESS_WITH_INFO döndürür ve bu noktada uygulama çağırarak showplan veya İstatistikler zaman çıkış alabilirsiniz SQLGetDiagRec sql_no_data dönene kadar. Her showplan veri satırı geri biçiminde gelir:

szSqlState="01000", *pfNativeError=6223,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server] 
              Table Scan"

szSqlState="01000", *pfNativeError=6223,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server] 
              Table Scan"

SQL Serversürüm 7.0 showplan seçeneği yerini showplan_all ve showplan_text, her ikisi de bunlar çıktı sonuç olarak ayarlamak, olmayan iletileri kümesi döndürür.

İstatistik zaman her satırı geri biçiminde gelir:

szSqlState="01000", *pfNativeError= 3613,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
   SQL Server Parse and Compile Time: cpu time = 0 ms."

szSqlState="01000", *pfNativeError= 3613,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
   SQL Server Parse and Compile Time: cpu time = 0 ms."

set STATISTICS GÇ çıkış sonuç kümesi sonuna kadar kullanılamaz. STATISTICS GÇ Uygulama çağrıları çıkışı almak için SQLGetDiagRec zaman SQLFetch ya SQLFetchScrollsql_no_data verir. STATISTICS GÇ çıkış geri biçiminde gelir:

szSqlState="01000", *pfNativeError= 3615,
szErrorMsg="[Microsoft][ SQL Server Native Client][SQL Server]
   Table: testshow  scan count 1,  logical reads: 1,
   physical reads: 0."

szSqlState="01000", *pfNativeError= 3615,
szErrorMsg="[Microsoft][ SQL Server Native Client][SQL Server]
   Table: testshow  scan count 1,  logical reads: 1,
   physical reads: 0."

dbcc deyimleri kullanarak

dbcc deyimleri veri mesaj olarak değil sonuç kümeleri döndürür. SQLExecDirect veya SQLExecute SQL_SUCCESS_WITH_INFO ve uygulama alır çıkışı arayarak iade SQLGetDiagRec sql_no_data dönene kadar.

Örneğin, aşağıdaki deyim SQL_SUCCESS_WITH_INFO döndürür.

SQLExecDirect(hstmt, "DBCC CHECKTABLE(Authors)", SQL_NTS);

SQLExecDirect(hstmt, "DBCC CHECKTABLE(Authors)", SQL_NTS);

Aramalar için SQLGetDiagRec döndürür:

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."

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."

BASKI ve RAISERROR deyimleri kullanarak

Transact-SQLBASKI ve RAISERROR deyimleri de dönüş veri çağırarak SQLGetDiagRec. Yazdırma deyimleri neden SQL_SUCCESS_WITH_INFO ve bir sonraki arama dönmek sql deyimi yürütme SQLGetDiagRec döndüren bir SQLState , 01000. On veya daha düşük bir önem sahip RAISERROR baskı ile aynı şekilde davranır. sql_error ve bir sonraki arama dönmek execute bir RAISERROR 11 veya daha yüksek önem derecesi ile neden SQLGetDiagRec döner SQLState 42000. Örneğin, aşağıdaki deyim SQL_SUCCESS_WITH_INFO döndürür.

SQLExecDirect (hstmt, "PRINT  'Some message' ", SQL_NTS);

SQLExecDirect (hstmt, "PRINT  'Some message' ", SQL_NTS);

Arama SQLGetDiagRec döndürür:

szSQLState = "01000", *pfNative Error = 0,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
   Some message"

szSQLState = "01000", *pfNative Error = 0,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
   Some message"

Aşağıdaki deyim, SQL_SUCCESS_WITH_INFO döndürür:

SQLExecDirect (hstmt, "RAISERROR ('Sample error 1.', 10, -1)",
   SQL_NTS)

SQLExecDirect (hstmt, "RAISERROR ('Sample error 1.', 10, -1)",
   SQL_NTS)

Arama SQLGetDiagRec döndürür:

szSQLState = "01000", *pfNative Error = 50000,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
   Sample error 1."

szSQLState = "01000", *pfNative Error = 50000,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
   Sample error 1."

Aşağıdaki deyimi sql_error döndürür:

SQLExecDirect (hstmt, "RAISERROR ('Sample error 2.', 11, -1)", SQL_NTS)

SQLExecDirect (hstmt, "RAISERROR ('Sample error 2.', 11, -1)", SQL_NTS)

Arama SQLGetDiagRec döndürür:

szSQLState = "42000", *pfNative Error = 50000,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
   Sample error 2."

szSQLState = "42000", *pfNative Error = 50000,
szErrorMsg= "[Microsoft] [SQL Server Native Client][SQL Server]
   Sample error 2."

Arama zamanlaması SQLGetDiagRec sonuç kümesinde Yazdır veya RAISERROR deyimi çıktısı dahil olduğunda önemlidir. Çağrı SQLGetDiagRec yazdırma veya RAISERROR almaya çıktı hemen sonra deyimi sql_error veya SQL_SUCCESS_WITH_INFO alan ile yapılması gerekir. Yalnızca tek bir sql deyimi yürütüldüğünde, yukarıdaki örneklerde olduğu gibi bu işlem basittir. Bu durumda, çağrı SQLExecDirect veya SQLExecute SQL_SUCCESS_WITH_INFO sql_error döner ve SQLGetDiagRec sonra çağrılabilir. Öyle basit ne zaman daha az kodlama yürütürken sql deyimleri veya toplu çıkış işlemek için döngüler SQL Serversaklı yordamlar.

Bu durumda, SQL Serveriçin bir toplu iş veya saklı yordam yürütülen her select deyiminde bir sonuç kümesi verir. Toplu işlem veya yordamı yazdırma veya RAISERROR deyimi içeriyorsa, çıktı bunlar için select deyiminin sonuç kümeleri ile Aralanmış. Yordam veya toplu iş içinde ilk deyim bir baskı veya RAISERROR, ise SQLExecute veya SQLExecDirect SQL_SUCCESS_WITH_INFO veya sql_error ve uygulama ihtiyaçlarını aramaya döner SQLGetDiagRec Yazdır veya RAISERROR bilgilerini almak için sql_no_data dönene kadar.

YAZDIRMA veya RAISERROR deyimi bir sql deyimi (örneğin, bir select deyimi) sonra gelir, daha sonra Yazdır veya RAISERROR bilgileri ne zaman döner SQLMoreResults hata içeren ayarlamak sonucu pozisyonlar. SQLMoreResults ileti önem bağlı SQL_SUCCESS_WITH_INFO veya sql_error döndürür. Adresinden alındı iletilerinin çağırarak SQLGetDiagRec sql_no_data dönene kadar.

Ayrıca bkz.

Kavramlar

Hataları ve iletileri işleme