Aracılığıyla paylaş


İletileri üretmek deyimleri işleme

The Transact-SQL SET statement options STATISTICS TIME and STATISTICS IO are used to get information that aids in diagnosing long-running queries.Önceki sürümlerinde SQL Server destekleyen da showplan seçeneği analiz sorgu planları.Bir odbc uygulaması olabilir küme aşağıdaki deyimleri yürütme tarafından bu seçenekleri:

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

İSTATİSTİKLER zaman AYARLAMAK veya showplan set zaman on, SQLExecute ve SQLExecDirect SQL_SUCCESS_WITH_INFO döndürür ve bu noktada uygulama showplan veya İSTATİSTİKLERİ zaman çıktı çaðýrarak elde edebilirsiniz SQLGetDiagRec sql_no_data dönünceye kadar.Her satırı showplan veri biçiminde gelir:

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

SQL Server sürüm 7.0 ile showplan_all ve showplan_text showplan seçeneği yerine, ikisi de, iade olarak çıktı bir sonuç küme, iletileri küme değil.

İstatistik zaman her satır 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."

küme İSTATİSTİKLERİ GÇ çıkışını bir sonuç küme sonuna kadar kullanılamaz.İSTATİSTİKLERİ GÇ uygulama çağrıları çıktı, almak için SQLGetDiagRec saat SQLFetch veya SQLFetchScroll verir sql_no_data.İSTATİSTİKLERİ GÇ çıktı 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."

dbcc deyimleri kullanarak

dbcc deyimleri sonuç kümeleri iletileri olarak kendi verilerini döndürür.SQLExecDirect veya SQLExecute SQL_SUCCESS_WITH_INFO ve uygulama alır çıktı çağırarak dönmek SQLGetDiagRec sql_no_data dönünceye kadar.

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

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

Çağrıları 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."

Yazdırma ve RAISERROR deyimleri kullanarak

Transact-SQLYazdırma ve RAISERROR deyimleri de veri döndür çağırarak SQLGetDiagRec.Yazdırma ifadelerinin başarısız olmalarına neden SQL_SUCCESS_WITH_INFO ve sonradan geri dönmek sql deyim yürütme SQLGetDiagRec döndüren bir SQLState 01000.On veya daha düşük bir önem derecesi bir RAISERROR baskı olarak aynı şekilde davranır.11 Veya daha yüksek önem derecesi bir RAISERROR SQL_ERROR hatası ve sonradan geri dönmek yürütmek neden olan SQLGetDiagRec verir SQLState 42000.Örneğin, aşağıdaki deyim SQL_SUCCESS_WITH_INFO döndürür:

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

Arayan SQLGetDiagRec döndürür:

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)

Arayan SQLGetDiagRec döndürür:

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

Aşağıdaki deyim SQL_ERROR hatası döndürür:

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

Arayan SQLGetDiagRec döndürür:

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

Arama zamanlaması SQLGetDiagRec Yazdır veya RAISERROR deyimi çıktısı bir sonuç küme yer aldığında çok önemlidir.Çağrı SQLGetDiagRec yazdırma veya RAISERROR çıktı almak için hemen sonra yapılmalıdır deyim , SQL_ERROR hatası veya SQL_SUCCESS_WITH_INFO alır.Tek bir sql deyim yürütüldüğünde olarak Yukarıdaki örneklerde açıktır.Bu durumda, çağrı SQLExecDirect veya SQLExecute SQL_ERROR hatası veya SQL_SUCCESS_WITH_INFO döndürür ve SQLGetDiagRec sonra çağrılabilir.sql deyimlerinin veya bir toplu iş çıktısı yürütürken işlemek için kodlama basit ne zaman daha az döngüsü ise SQL Server saklı yordamlar.

Bu durumda, SQL Server döndüren bir sonuç küme için yürütülen bir toplu iş veya saklı yordam. her bir deyimtoplu iş iş veya yordamı yazdırma veya RAISERROR deyim içeriyorsa, çıktı bunlar için select deyiminin sonuç kümeleri ile Aralanmış.İlk deyim, toplu iş iş iş veya yordamı yazdırma veya RAISERROR, ise SQLExecute veya SQLExecDirect SQL_SUCCESS_WITH_INFO veya SQL_ERROR hatası ve uygulama çağrısı için gereksinim duyduğu verir SQLGetDiagRec yazdırma veya RAISERROR bilgilerini almak için sql_no_data dönünceye kadar.

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 iletinin önem derecesini bağlı SQL_SUCCESS_WITH_INFO veya SQL_ERROR hatası döndürür.İletileri çağrılarak alınır SQLGetDiagRec sql_no_data dönünceye kadar.

Ayrıca bkz.

Kavramlar