Hej. Antingen måste du ha en tillräckligt hög severity, alt. kan du använda WITH SETERROR Hej! Hej igen. WITH SETERROR är en option till Raiserror. Om jag förstår dig rätt så kan du inte göra det du vill. Raiserror slänger ett fel med ett nummer som du definierar, du kan inte kasta SQL Servers fel vidare. Nja, bara om @@error >= 13000. De flesta fel som man kan vara intresserad av i såna här fall, t ex en foreign key violation eller något, ligger under 13000. <code>RAISERROR
Har precis börjat titta på transaktioner i sql-server.
Hur gör man ifall man efter rollback bara vill skicka vidare felet till klienten??
-- UPDATE tbl.....
IF @error != 0
BEGIN
@ErrNum = @error
ROLLBACK TRANSACTION
RAISERROR(?????) -Hur göra här??
RETURN
END
//freddaSv: RAISERROR
Sv: RAISERROR
Ett raisat fel i TSQL mappas mot ett normalt raisat COM error mot klienten. Detta kan enkelt snappas upp i en vanlig ErrorHandler enligt koden nedan (exempel i VB). Severity levels 11-16 på TSQLs RAISERROR är mappade som användargenererade...
<code>
Public Sub ExecStoredProc()
On Error GoTo ErrHandler
Dim cn As ADODB.Connection
Dim cmd As ADODB.Command
Set cn = New ADODB.Connection
cn.Open ("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=testdb;Data Source=.")
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = cn
.CommandText = "ThrowMe"
.CommandType = adCmdStoredProc
.Execute
End With
cn.Close
Set cmd = Nothing
Set cn = Nothing
Exit Sub
ErrHandler:
Debug.Print Err.Description & ", source: " & Err.Source
End Sub
</code>
<code>
CREATE PROCEDURE ThrowMe AS
RAISERROR ('This error raised from the stored proc.',16,1)
GO
</code>
/MickeSv: RAISERROR
"WITH SETERROR" hittade jag inget på i Books Online :-/
Gejen är att jag vill ha fram textmeddelandet som sql-servern skickar när jag får fel.
Vill bara ha en möjlighet att göra en rollback först, för att sen skicka felet som om jag inte hade tagit hand om det.
Jag är som sagt nybörjare på transaktioner och felhantering i TSQL så om jag inte tänker i rätt banor får ni hojta till...
//freddaSv: RAISERROR
Sv: RAISERROR
Sv: RAISERROR
Rackarns!
Hmm. Det finns ingenstans man kan "slå upp" vilket felmeddelande ett visst felnummer har?? Direkt i SQL menar jag då, en system-sp eller liknande.
Det bästa vore om det fanns en funktion typ @@ERRMSG :-/
Tackar iallafall för alla svar men kom gärna med fler kommentarer.
//freddaSv: RAISERROR
SET @errornum = @@error
SELECT description FROM master.dbo.sysmessages WHERE error = @errornum
</code>