2010-12-10 17 views
1

Problem Kontext: Ich benutze Visual Studio 2008 und typisierte Dataset, die einen „easy“ Zugang zu executescalar() gibt den Wert des ersten Feldes der ersten Reihe des ersten recorset (diesen letzten Teil oft ausführen Skalar bieten weggelassen)Wie kann verhindert werden, dass gespeicherte Prozeduren Zwischen-Recordsets zurückgeben?

Das Problem bei diesem Verhalten ist, dass die meisten oft Sie einige andere Anfragen machen wollen, bevor Sie den Wert berechnen mit einer endgültigen select @returnValue Anweisung zurückgegeben werden.

Also meine Frage ist, im Allgemeinen Wie verhindern Sie, dass ein SP Zwischenrecords zurückgibt? (Ich habe versucht FMTONLY ON SET/OFF, sondern habe unerwünschtes Nebenverhalten)

Eine andere verwandte Frage ist: Wie verhindern Sie eine T-SQL-Anweisung UPDATE aus den aktualisierten Zeilen Rückkehr? Manchmal verwenden Sie UPDATE, um einfach zu aktualisieren ...

danke!

Beispiel:

BEGIN

SET NOCOUNT ON; 

declare @c int 
select @c=(select count(*) from work where ...) 
select @c -- so ExecuteScalar() works 
update sousblocs set myfield = @c 
     where ... 

select @c --after the update, won't be seen by ExecuteScalar() 
return @c --useless for ExecuteScalar 

END

dies mein Problem war, und es kann mit dem ersten "wählen @c" gelöst werden; aber ich frage mich trotzdem, ob Sie recorset Ausgabe deaktivieren können.

+1

"Sie möchten einige andere Anfragen machen" - bitte zeigen Sie uns einen Beispielcode von einem Ihrer Sprocs, um zu veranschaulichen, was Sie hier meinen – AakashM

+0

Ich meine, zum Beispiel berechnen Sie einen Wert mit einem Update gespeichert werden, und Sie möchte diesen Wert zurückgeben. In diesem Fall ist das Update das erste zurückgegebene Recordset – oldbrazil

Antwort

1

1 - Haben Sie nicht mehrere Select-Anweisungen in Ihrem gespeicherten proc ohne Ziel. I.e. Wenn Sie SELECT 1,2,3 und dann SELECT 4,5,6 ausführen, gibt es 2 Recordsets zurück.

2 - Ich bin mir nicht sicher, warum Sie Aufzeichnungen erhalten, wenn Sie ein Update ausführen. Versuchen Sie die Einstellung SET NOCOUNT ON, um die Meldungen "xx rows affected" zu deaktivieren.

+0

"SET NOCOUNT ON" bereits festgelegt. Zurückgegebene Nachrichten sind nicht das Problem. Anweisungen wie "select @ var = somefunc (..." geben keine Recordsets zurück und es gibt keinen Punkt in SELECTING, wenn Sie kein Recordset wollen. Das ist richtig. Aber die Update-Anweisung ist ein Problem ... außer Sie Beachten Sie, dass Sie mit einem bekannten Wert aktualisieren, den Sie vorher auswählen können ... – oldbrazil

+1

@oldbrazil - Was bekommen Sie genau zurück? – JNK

Verwandte Themen