05. august 2002 - 07:01
Der er
3 kommentarer og
1 løsning
Output fra stored procedure til ASP ?
Jeg har en Stored procedure som beregner og gemmer sit output i en #tmp tabel. Hvis jeg kalder sp fra query analyzer virker det fint og jeg får mit recordset tilbage, men hvis jeg kalder sp fra ASP kommer der intet tilbage når jeg bruger #tmp tabellen. Hvis jeg gemmer resultatet i en normal tabel i sp virker det også fra ASP. Men jeg vil helst bruge en #tmp a.h.t flere brugere samtidig.
-- denne virker ikke fra ASP
CREATE PROCEDURE [sp_test]
AS
select * into #tmpresult from table1
select * from #tmpresult
return
-- denne virker fra ASP
CREATE PROCEDURE [sp_test]
AS
select * from table1
return
min ASP
Set Conn = Server.CreateObject ("ADODB.Connection")
Conn.Open min_db_connection
strsql = "exec sp_test"
set rs = Conn.Execute(StrSQL)
response.write rs.fields.count
kan nogen forklare hvorfor ?
06. august 2002 - 08:30
#2
Og så lige forklaringen.
Den første af dine select statements indeholder to gange select. De returneres begge til det kaldende kode, og desuden returneres information om hvor mange poster, der er berørt af sql-koden. Dette kan ikke altid håndteres simpelt af f.eks. Visual Basic eller ASP.
Det, jeg gør med 'set nocount on' er, at jeg fortæller SQL Serveren, at den skal sk*d* højt og flot på, at der er en klient. Den skal ikke bruge noget output tilbage. Kun det select statement, der skal returnere noget til klienten, skal stå efter en 'set nocount off'.
Om der er yderligere en 'set nocount on' efter den returnerende sql statement, er ligegyldigt. Du kunne godt have lavet en create table #tempresult inden og så efter dit select fra #tempresult have udført en drop table #tempresult. AFAIR bør man ifølge Books Online direkte undgå at lave en select into, da det går ud over performance. Bedre er det at oprette tabellen på forhånd og indsætte med insert ... select.
Ydermere bør du undgå enhver brug af select *, hvis du ikke SKAL bruge samtlige felter i tabellen. Jo flere felter, der skal hentes, jo langsommere.
07. august 2002 - 06:39
#3
Hej Benny
Tak for svaret, det hjalp at sætte NOCOUNT off. Jeg er godt klar over at SELECT * belaster men i dette tilfælde returneres kun 1 post med 5 felter. Jeg kendte dog ikke til NOCOUNT problematillen.
Hilsen
Peter Calum