Hej! Såg att man redan diskuterat ett liknande problem redan. Jag har testat med att sätta SET NOCOUNT ON i min SP, men tyvärr så fungerar det inte. Om jag inte minns fel så gäller ett SET kommando för hela exekveringen, dvs även i anrop till under-SP (dvs i första SP finns SET NOCOUNT ON, sen när denna SP anropar en annan så gäller SET NOCOUNT ON även där?) Det stämmer, SET NOCOUNT gäller för hela sessionen. Låter som en bugg i MDAC. Kan du precisiera vad i din SP som gör att det ej fungerar, typ genom att ta bort delar av koden och testa? Det är nog det man får göra, eftersom man inte kan debugga i QA (det fungerar ju där). Hej!Fel vid exekvering av SP med SQLOLEDB provider
Jag har en applikation som exekverar en ganska komplex SP via ADO commandobjekt. SP'n använder en del cursors och och anropar i sin tur andra SP's. När jag exekverar den i Query Analyzer så fungerar det utmärkt. När jag exekverar den i VB via ADO så fungerar det med tidiga versioner av SQLOLEDB men ej med senare versioner tex Win XP (MDAC 2.7?). Byter jag provider för connection objektet till MSDASQL så fungerar det. Felmeddelandet från SP'n är "-2147467259 Unspecified error".
Är det någon som råkat ut för något liknande?
/MagnusSv: Fel vid exekvering av SP med SQLOLEDB provider
/MagnusSv: Fel vid exekvering av SP med SQLOLEDB provider
Sv: Fel vid exekvering av SP med SQLOLEDB provider
/MagnusSv: Fel vid exekvering av SP med SQLOLEDB provider
Nu har jag funnit vad som orsakade felet. Tänkte skriva ifall någon annan är intresserad. Bakgrunden är att jag med en dynamisk SQL sträng vill kontrollorera om en post existerar eller ej. Normalt skulle jag använda IF EXISTS() men detta får jag inte till med en dynamisk SQL sträng. Därför använder jag en dynamiskt deklarerad cursor:
SET @p_Sel='SELECT * FROM ' + @p_ToTable + ' WHERE ' + @p_ToKeyValue
EXECUTE('DECLARE rsTemp CURSOR STATIC READ_ONLY FOR ' + @p_Sel)
OPEN rsTemp
FETCH NEXT FROM rsTemp
IF @@FETCH_STATUS <> -1
BEGIN
SET @p_Update=1
END
ELSE
BEGIN
-- Record don't exists i ToTable
SET @p_Update=0
END
---SNIP---
Denna variant fungerar felfritt med MSDASQL och tidiga versioner av SQLOLEDB. Med nyare versioner av SQLOLEDB höjs ett fel i ADO Command objectet. MEN stored proceduren har dock exekverats felfritt! Det enda är att jag i VB-klienten får ett felmeddelande.
Denna variant (det som är ändrat är SQL-satsen och FETCH NEXT...) fungerar även på nyare SQLOLEDB versioner. Problemet löstes alltså när man hämtade ett värde från cursorn och la i en variabel.
SET @p_Sel='SELECT ''Q'' AS FLD FROM ' + @p_ToTable + ' WHERE ' + @p_ToKeyValue
EXECUTE('DECLARE rsTemp CURSOR STATIC READ_ONLY FOR ' + @p_Sel)
OPEN rsTemp
FETCH NEXT FROM rsTemp INTO @FldVal
IF @@FETCH_STATUS <> -1
BEGIN
SET @p_Update=1
END
ELSE
BEGIN
-- Record don't exists i ToTable
SET @p_Update=0
END
---SNIP---
/Magnus