Avatar billede rust10 Nybegynder
02. april 2004 - 20:47 Der er 6 kommentarer og
1 løsning

optimering a query

Jeg har en SP til at checke kodeord/password, men jeg har to username/password tabeller som personen kan være oprettet i. Lige nu ser min SP sådan her ud:

CREATE PROCEDURE checkCredentials (@CustomerEmail varchar(30), @CustomerPassword varchar(20))
AS
IF(SELECT count(*) AS 'CredentialCheckCount' FROM tblCustomers WHERE CustomerEmail1=@CustomerEmail AND CustomerPassword=@CustomerPassword)=0
SELECT count(*) AS 'CredentialCheckCount' FROM tblBugHandlers WHERE BugHandlerEmail=@CustomerEmail AND BugHandlerPassword=@CustomerPassword
ELSE
SELECT count(*) AS 'CredentialCheckCount' FROM tblCustomers WHERE CustomerEmail1=@CustomerEmail AND CustomerPassword=@CustomerPassword
GO

Jeg gad godt at returnere true eller false hvis personen er fundet i en af tabellerne, og også gerne have en måde kun at lave 2 forespørgelser i stedet for mine 3 lige nu.
Avatar billede trer Nybegynder
02. april 2004 - 21:18 #1
Du kan gøre således:

create procedure checkcredentials (
  checkCredentials (@CustomerEmail varchar(30), @CustomerPassword varchar(20))
) as
begin
  select count(*) as CredentialCheckCount from tblCustomers
  where CustomerEmail1=@CustomerEmail AND CustomerPassword=@CustomerPassword
  union all
  select count(*) from  tblBugHandlers
  where CustomerEmail1=@CustomerEmail AND CustomerPassword=@CustomerPassword
end
Avatar billede trer Nybegynder
02. april 2004 - 21:19 #2
Ovenstående var naturligvis et svar :-)
Avatar billede trer Nybegynder
02. april 2004 - 21:22 #3
Ved nærmere eftertanke - måske dette er bedre: Nu burde den kun returnere et record med 1 tal såfremt password matcher.

create procedure checkcredentials (
  checkCredentials (@CustomerEmail varchar(30), @CustomerPassword varchar(20))
) as
begin
  select 1 as CredentialCheck from tblCustomers
  where CustomerEmail1=@CustomerEmail AND CustomerPassword=@CustomerPassword
  union
  select 1 from  tblBugHandlers
  where CustomerEmail1=@CustomerEmail AND CustomerPassword=@CustomerPassword
end
Avatar billede rust10 Nybegynder
04. april 2004 - 12:50 #4
takker
Avatar billede rust10 Nybegynder
05. april 2004 - 16:26 #5
Har først lige haft tid til at teste dine forslag, de gør faktisk ikke helt hvad jeg vil have. Min originale SP returnere én række som er 1 hvis godkendt eller 0 hvis ikke.

Dit første forslag returnere to rækker hvor en af dem er 1 hvis godkendt, dit andet forslag returnere én række men ingenting hvis nægtet og 1 hvis godkendt.. Ville gerne have det til 0 ved nægtet adgang da jeg ikke har mulighed for at ændre min kode der benytter denne procedure.
Avatar billede trer Nybegynder
05. april 2004 - 17:05 #6
Ok, prøv at lege med denne - jeg har ikke testet noget.

create procedure checkcredentials (
  checkCredentials (@CustomerEmail varchar(30), @CustomerPassword varchar(20))
) as
begin
  select isnull(credentialcheck,0) as credentialcheck from (
  select 1 as CredentialCheck from tblCustomers
  where CustomerEmail1=@CustomerEmail AND CustomerPassword=@CustomerPassword
  union
  select 1 from  tblBugHandlers
  where CustomerEmail1=@CustomerEmail AND CustomerPassword=@CustomerPassword
  )
end
Avatar billede rust10 Nybegynder
06. april 2004 - 08:39 #7
gad godt at den query analyzer kunne fortælle mig lidt mere når der er fejl. Lige nu siger den bare "Incorrect syntax near the keyword 'end'." efter jeg har lavet lidt om på den (den fatter intet af den måde du starter proceduren på, copy/paste fejl?)

den omskrevet ser sådan ud nu:

create procedure checkcredentials2 (@CustomerEmail varchar(30), @CustomerPassword varchar(20))
as
begin
  select isnull(CredentialCheck,0) as CredentialCheck from (
  select 1 as CredentialCheck from tblCustomers
  where CustomerEmail1=@CustomerEmail AND CustomerPassword=@CustomerPassword
  union
  select 1 from  tblBugHandlers
  where BugHandlerEmail=@CustomerEmail AND BugHandlerPassword=@CustomerPassword
  )
end
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester