Dela via


Förstå databasmotorfel

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric

Fel som genereras av Microsoft SQL Server Database Engine har de attribut som beskrivs i följande tabell.

Attribut Beskrivning
Felnummer Varje felmeddelande har ett unikt felnummer.
Felmeddelandesträng Felmeddelandet innehåller diagnostikinformation om orsaken till felet. Många felmeddelanden har ersättningsvariabler där information, till exempel namnet på objektet som genererar felet, infogas.
Allvarlighet Allvarlighetsgraden anger hur allvarligt felet är. Fel med låg allvarlighetsgrad, till exempel 1 eller 2, är informationsmeddelanden eller varningar på låg nivå. Fel med hög allvarlighetsgrad indikerar problem som bör åtgärdas så snart som möjligt. Mer information om allvarlighetsgrader finns i Databasmotorns fels allvarlighetsgrader.
Stat Vissa felmeddelanden kan genereras vid flera punkter i koden för databasmotorn. Till exempel kan ett 1105-fel genereras för flera olika villkor. Varje specifikt villkor som genererar ett fel tilldelar en unik tillståndskod.

När du visar databaser som innehåller information om kända problem, till exempel Microsoft Knowledge Base, kan du använda tillståndsnumret för att avgöra om det registrerade problemet är detsamma som det fel som du har påträffat. Om en kunskapsbasartikel till exempel beskriver ett 1105-fel som har tillståndet 2 och 1105-felmeddelandet som du fick hade tillståndet 3, har felet förmodligen en annan orsak än det som rapporterades i artikeln.

En Microsoft-supporttekniker kan också använda tillståndskoden från ett fel för att hitta platsen i källkoden där felkoden genereras. Den här informationen kan ge ytterligare idéer om hur du diagnostiserar problemet.
Procedurnamn Är namnet på den lagrade proceduren eller utlösaren där felet har inträffat.
Radnummer Anger vilken instruktion i en batch, lagrad procedur, utlösare eller funktion som genererade felet.

Alla system- och användardefinierade felmeddelanden i en instans av databasmotorn finns i sys.messages katalogvy. Du kan använda RAISERROR-instruktionen för att returnera användardefinierade fel till ett program.

Alla databas-API:er, till exempel Microsoft .NET Framework SQLClient namnområde, ActiveX Data Objects (ADO), OLE DB och Open Database Connectivity (ODBC), rapporterar de grundläggande felattributen. Den här informationen innehåller felnumret och meddelandesträngen. Alla API:er rapporterar dock inte alla andra felattribut.

Information om ett fel som inträffar i räckvidden för TRY-blocket i en TRY...CATCH-konstruktion kan erhållas i Transact-SQL-kod med hjälp av funktioner som ERROR_LINE, ERROR_MESSAGE, ERROR_NUMBER, ERROR_PROCEDURE, ERROR_SEVERITY och ERROR_STATE i räckvidden för det associerade CATCH-blocket. Mer information finns i TRY... CATCH (Transact-SQL).

Exempel

Följande exempel frågar sys.messages katalogvyn för att returnera en lista över alla system- och användardefinierade felmeddelanden i databasmotorn som har engelsk text (1033).

SELECT  
    message_id,  
    language_id,  
    severity,  
    is_event_logged,  
    text  
  FROM sys.messages  
  WHERE language_id = 1033;  

Mer information finns i sys.messages (Transact-SQL).

Se även

sys.messages (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
TRY... CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)