Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


If sats i lagrad procedur, prestanda???

Postades av 2008-05-31 15:49:06 - Christer Engholm, i forum databaser, Tråden har 3 Kommentarer och lästs av 1345 personer

Vad jag vet så skapar man lagrade procedurer för att när de "körts 1 gång" i SQL så behålls resultatet i "minnet", stämmer detta? Om så är fallet, hur påverkas detta resonemang om man kör en lagrad procedur t. ex. getUserInfo och i denna har kör man olika sql-satser beroende på vilken parameter man skickat med, se exempel:
<code>
ALTER PROCEDURE dbo.spHandleUser
(
@ACTION NVARCHAR(50),
@UserID INT,
@UserName NVARCHAR(50),
@Password NVARCHAR(255),
@PasswordQuestion NVARCHAR(255) = NULL,
@CompanyID INT,
@UserLevel INT,
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50),
@Address NVARCHAR(50) = NULL,
@Zip NVARCHAR(50) = NULL,
@City NVARCHAR(50) = NULL,
@WorkPhone NVARCHAR(50) = NULL,
@Phone NVARCHAR(50) = NULL,
@WorkMobile NVARCHAR(50) = NULL,
@Mobile NVARCHAR(50) = NULL,
@WorkFax NVARCHAR(50) = NULL,
@Fax NVARCHAR(50) = NULL,
@WorkEmail NVARCHAR(255),
@Email NVARCHAR(255) = NULL,
@AccountCreatedByID INT,
@AccountUpdatedDate SMALLDATETIME = NULL,
@AccountUpdatedByID INT = NULL,
@AccountInactivatedDate SMALLDATETIME = NULL,
@AccountInactivatedByID INT = NULL,
@UserIsActive INT,
@AutoLogin INT
)

AS

DECLARE @CheckIfExists INT
DECLARE @NewID INT

SET @CheckIfExists = NULL

/*******************************************************************************************************
ADDERA ANVÄNDARE
*******************************************************************************************************/
IF @ACTION = 'AddUser'

BEGIN

BEGIN

SELECT @CheckIfExists = tblUsers.pkUserID
FROM tblUsers
INNER JOIN tblUserDetails
ON tblUsers.pkUserID = tblUserDetails.fkUserID
WHERE
tblUsers.UserName = @UserName
OR
tblUserDetails.WorkEmail = @WorkEmail

SET @NewID = 0

END

IF @CheckIfExists IS NULL

BEGIN

INSERT INTO tblUsers
(
UserName,
Password,
PasswordQuestion
)
VALUES
(
@UserName,
@Password,
@PasswordQuestion
)

BEGIN

SELECT @NewID = MAX(pkUserID)
FROM tblUsers

BEGIN

INSERT INTO tblUserDetails
(
fkUserID,
fkCompanyID,
fkUserLevel,
FirstName,
LastName,
Address,
Zip,
City,
WorkPhone,
Phone,
WorkMobile,
Mobile,
WorkFax,
Fax,
WorkEmail,
Email,
AccountCreatedByID,
UserIsActive
)
VALUES
(
@NewID,
@CompanyID,
@UserLevel,
@FirstName,
@LastName,
@Address,
@Zip,
@City,
@WorkPhone,
@Phone,
@WorkMobile,
@Mobile,
@WorkFax,
@Fax,
@WorkEmail,
@Email,
@AccountCreatedByID,
@UserIsActive
)

BEGIN

INSERT INTO tblUserStats
(
fkUserID
)
VALUES
(
@NewID
)

END

END

END

END

RETURN @NewID

END

/*******************************************************************************************************
UPPDATERA ANVÄNDARE
*******************************************************************************************************/
IF @ACTION = 'UpdateUser'

BEGIN

BEGIN

SELECT @CheckIfExists = pkUserID
FROM tblUsers
WHERE pkUserID = @UserID

END

IF NOT @CheckIfExists IS NULL

BEGIN

UPDATE tblUsers
SET
UserName = @UserName,
Password = @Password,
PasswordQuestion = @PasswordQuestion
WHERE pkUserID = @UserID

END

BEGIN

UPDATE tblUserDetails
SET
AutoLogin = @AutoLogin,
FirstName = @FirstName,
LastName = @LastName,
Address = @Address,
Zip = @Zip,
City = @City,
WorkPhone = @WorkPhone,
Phone = @Phone,
WorkMobile = @WorkMobile,
Mobile = @Mobile,
WorkFax = @WorkFax,
Fax = @Fax,
WorkEmail = @WorkEmail,
Email = @Email,
AccountUpdatedDate = @AccountUpdatedDate,
AccountUpdatedByID = @AccountUpdatedByID,
AccountInactivatedDate = @AccountInactivatedDate,
AccountInactivatedByID = @AccountInactivatedByID,
UserIsActive = @UserIsActive
WHERE fkUserID = @UserID

END

IF @CheckIfExists IS NULL

BEGIN

SET @CheckIfExists = 0

END

RETURN @CheckIfExists

END
</code>

Tacksam för alla svar o synpunkter :)


Svara

Sv: If sats i lagrad procedur, prestanda???

Postades av 2008-05-31 23:00:33 - Pelle Johansson

Hej,

Det finns flera saker som gör att sp:ar är bättre än att vara utan. Först som du säger så lagras resultatet i något som heter execution plan och gör att nästkommande frågor går mycket snabbare. Information som hämtas ut lagras också i internminnet så nästa anrop kommer gå fortare.

Utöver just detta så är en sp prekompilerad, dvs att den kontrollerats att alla fält finns, att din syntax är rätt och liknande. Därför behöver inte detta göras om då du kallar en sp - vilket också snabbar upp flödet avsevärt.


Svara

Sv:If sats i lagrad procedur, prestanda???

Postades av 2008-06-01 01:43:06 - Roger Alsing

njaaee

SQL server kompilerar även ad hoc frågor till temp stored procs.
så allt som gäller för sprocs gäller även för ad hoc.
(förutom att du har viss overhead av parsningen av frågan vid ad hoc)


Svara

Sv:If sats i lagrad procedur, prestanda???

Postades av 2008-06-01 13:30:28 - Martin Adrian

>Först som du säger så lagras resultatet i något som heter execution plan

Innehållet i parametrarna kan göra att den sparade execution plan inte är den bästa lösningen på problemet.

Framförallt skall man vara uppmärksam på om koden kan gå olika vägar beroende på parametrar (t.ex. if som ursprungsfrågan handlade om). I värsta fall kan if innebära att execution plan måste göras om med varje anrop.


Svara

Nyligen

  • 17:03 Getmancar your go-to carsharing
  • 14:07 Games
  • 17:54 Vegastars New Zealand
  • 16:56 Verde Casino Danmark
  • 13:54 Vegastars: Top Australian Online C
  • 21:28 Chicken Road Casino Game
  • 21:21 1xBet Promo Code 2025
  • 18:37 Remove the bumper in AUDI

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 571 428
27 965
271 785
1 794
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies