webForumDet fria alternativet

Här har ni kod för testning av storeprocedures

Databaser & SQL

5 svar · 509 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Frågan#1

Jag har gjort ett enkelt script för att testa procedurer. Kom gärna med feedback på förbättringar.

Kom-igång-guide
1. Skapa en databas som heter PerformanceTest. Kör scriptet i tabeller.txt
2. Öppna Query Analyzern och välj den databas du vill köra testerna på. Klipp och klistra in det andra scriptet.
3. Sätt in korrekta värden på dessa rader:
Set @StoreprocedureName = 'proc_XXXXXXXXX'

Samt korrekta inparametrar:
Set @StoreprocedureParameters = '230, ''2005-01-01'', ''2005-02-15'''

Det är lite speciellt med inparametrarna men ni listar nog ut hur det funkar. I annat fall får ni fråga.

4. Sen är det bara att köra :)

Som sagt är det någon som har några förslag på förbättringar av scriptet så får ni gärna säga till...

Medlem sedan dec. 19996 721 inlägg
#2

En bra idé, men att exekvera stored procedures med exec och parametrarna i kommandotexten är inte särskilt bra. Det ska undvikas i driftsituationer och därför är det inte särskilt rättvist att köra tester med det. Använd åtminstone sp_executesql i stället för exec.

Medlem sedan maj 20011 312 inlägg
#3

Tack för ditt svar!

Om jag anropar en procedur via Query Analyzern så är väl nedanstående tre alternativ identiska?

  1. proc_XXXXXXX 'invärde'

  2. exec proc_XXXXXXX 'invärde'

  3. Set @StoreprocedureName = 'proc_XXXXXXXXXX'
    Set @StoreprocedureParameters = ''invärde''
    Set @Storeprocedure = @StoreprocedureName + ' ' + @StoreprocedureParameters
    Exec (@Storeprocedure)

Sen har jag en fråga till. Om jag förstått sp_executesql rätt så kan man inte anropa en sp via den utan man kan enbart skicka med direkt sql-satser (typ Select User_Code from tbl_User) och det blir väl inte så bra om man använder sig av enbart procedurer?

Medlem sedan feb. 200520 inlägg
#4

Lukaspojken skrev:

Om jag förstått sp_executesql rätt så kan man inte anropa en sp via den utan man kan enbart skicka med direkt sql-satser (typ Select User_Code from tbl_User) och det blir väl inte så bra om man använder sig av enbart procedurer?

Det går att använda sp_executesql med procedures också. Jag skriver
sp_executesql N'EXEC myProcedure'
Det går säkert att skriva på andra sätt också. Jag har precis lärt mig detta.

Medlem sedan maj 20011 312 inlägg
#5

-> lenap
Det visste jag inte. Det var bra att det fanns!

Jag har en lite fundering kvar :) Var ligger fördelen i att använda sp_executesql istället för exec?

Medlem sedan dec. 200012 464 inlägg
#6

Skillnaden är att du kan parametrisa anrop med sp_execute_sql och få tillbaka värden i parametrar vilket inte går med EXEC. Det är också så att exekveringsplanen för frågor som utförs med sp_execute_sql sparas och kan därför återanvändas.

Att använda

sp_executesql N'EXEC myProcedure' 
-- eller lukaspojkens 3:e alternativ ovan

istället för

myProcedure

leder bara till onödig processering.

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)