Avatar billede bzz_rar Nybegynder
23. august 2004 - 19:57 Der er 11 kommentarer og
1 løsning

Stored procedure med en del af sql-sætningen som variabel

Jeg prøver at lav en SP hvor variablen er en den af SQL-sætningen, eksempelvis

strGruppe = "(websitedk.Artsliste.Gruppe = N'Store') OR (websitedk.Artsliste.Gruppe = N'Smaa')"

Ialt fire af disse variabler indgår i min SP:



CREATE PROCEDURE dt_obs

@farvekode nvarchar (255),
@gruppe  nvarchar (255)
@amtsnavn  nvarchar (255)
@observer2  nvarchar (255)

AS

SELECT TOP 500 websitedk.Observationer.[Year], websitedk.Observationer.[Month], websitedk.Observationer.[Day], websitedk.Lokalitetslookup.Lokalitetsnavn, websitedk.Observationer.Navn, websitedk.Observationer.ID, websitedk.Artsliste.ID AS OBSID, websitedk.Lokalitetslookup.id AS LOKID, websitedk.Artsliste.Farvekode, websitedk.Artsliste.Artsnavn, websitedk.Artsliste.Latin, websitedk.Artsliste.Engelsk, websitedk.Artsliste.Gruppe, websitedk.Artsliste.Bilag, websitedk.Kommunekoder.Kommune, websitedk.Amtskoder.Amt, websitedk.Observationer.Antal, websitedk.Observationer.Alder, websitedk.Observationer.Sex, websitedk.Observationer.Aktivitet, websitedk.Observationer.Start1, websitedk.Observationer.Start2, websitedk.Observationer.Slut2, websitedk.Observationer.Slut1, websitedk.Observationer.Kommentar, websitedk.Observationer.IndtastTime, websitedk.Observationer.UpdateTime, websitedk.Observationer.Egenobs, websitedk.Observationer.BrugerID, websitedk.Messages.Emne FROM websitedk.Kommunekoder RIGHT OUTER JOIN websitedk.Artsliste RIGHT OUTER JOIN websitedk.Lokalitetslookup LEFT OUTER JOIN websitedk.Messages ON websitedk.Lokalitetslookup.id = websitedk.Messages.LokalitetsID RIGHT OUTER JOIN websitedk.Observationer ON websitedk.Lokalitetslookup.id = websitedk.Observationer.LokalitetsID ON websitedk.Artsliste.ID = websitedk.Observationer.ArtsID ON websitedk.Kommunekoder.Kommunenummer = websitedk.Lokalitetslookup.Kommunenummer LEFT OUTER JOIN websitedk.Amtskoder ON websitedk.Lokalitetslookup.amtsnummer = websitedk.Amtskoder.Amtsnummer
WHERE (@farvekode) AND (@gruppe) AND (@amtsnavn) AND (@observer2)
ORDER BY websitedk.Observationer.[Year] DESC, websitedk.Observationer.[Month] DESC, websitedk.Observationer.[Day] DESC, websitedk.Lokalitetslookup.Lokalitetsnavn, websitedk.Observationer.Navn DESC, websitedk.Observationer.ID DESC

GO


Problemet er at jeg får en syntaksfejl, da variablen ikke står som med tegn som =, <>, =>, =< eller LIKE foran.

Er der nogen der har en løsning?
Avatar billede arne_v Ekspert
23. august 2004 - 20:05 #1
Du vil have input strenge til at indgå i din SQL ?

Prøv:

CREATE PROCEDURE dt_obs

@farvekode nvarchar (255),
@gruppe  nvarchar (255)
@amtsnavn  nvarchar (255)
@observer2  nvarchar (255)

AS

exec("SELECT TOP 500 websitedk.Observationer.[Year], websitedk.Observationer.[Month], websitedk.Observationer.[Day], websitedk.Lokalitetslookup.Lokalitetsnavn, websitedk.Observationer.Navn, websitedk.Observationer.ID, websitedk.Artsliste.ID AS OBSID, websitedk.Lokalitetslookup.id AS LOKID, websitedk.Artsliste.Farvekode, websitedk.Artsliste.Artsnavn, websitedk.Artsliste.Latin, websitedk.Artsliste.Engelsk, websitedk.Artsliste.Gruppe, websitedk.Artsliste.Bilag, websitedk.Kommunekoder.Kommune, websitedk.Amtskoder.Amt, websitedk.Observationer.Antal, websitedk.Observationer.Alder, websitedk.Observationer.Sex, websitedk.Observationer.Aktivitet, websitedk.Observationer.Start1, websitedk.Observationer.Start2, websitedk.Observationer.Slut2, websitedk.Observationer.Slut1, websitedk.Observationer.Kommentar, websitedk.Observationer.IndtastTime, websitedk.Observationer.UpdateTime, websitedk.Observationer.Egenobs, websitedk.Observationer.BrugerID, websitedk.Messages.Emne FROM websitedk.Kommunekoder RIGHT OUTER JOIN websitedk.Artsliste RIGHT OUTER JOIN websitedk.Lokalitetslookup LEFT OUTER JOIN websitedk.Messages ON websitedk.Lokalitetslookup.id = websitedk.Messages.LokalitetsID RIGHT OUTER JOIN websitedk.Observationer ON websitedk.Lokalitetslookup.id = websitedk.Observationer.LokalitetsID ON websitedk.Artsliste.ID = websitedk.Observationer.ArtsID ON websitedk.Kommunekoder.Kommunenummer = websitedk.Lokalitetslookup.Kommunenummer LEFT OUTER JOIN websitedk.Amtskoder ON websitedk.Lokalitetslookup.amtsnummer = websitedk.Amtskoder.Amtsnummer
WHERE (" + @farvekode + ") AND (" + @gruppe + ") AND (" + @amtsnavn + ") AND (" + @observer2 + ")
ORDER BY websitedk.Observationer.[Year] DESC, websitedk.Observationer.[Month] DESC, websitedk.Observationer.[Day] DESC, websitedk.Lokalitetslookup.Lokalitetsnavn, websitedk.Observationer.Navn DESC, websitedk.Observationer.ID DESC")

GO
Avatar billede bzz_rar Nybegynder
23. august 2004 - 20:21 #2
Tak for svaret. Har nu prøvet, men Enterprise Manager kommer med en error 170:

"The identifier that starts with 'Select bla bla..' is too long. Maximum lenght id 128"
Avatar billede arne_v Ekspert
23. august 2004 - 20:47 #3
Har du hele smøren i en linie ?
Avatar billede bzz_rar Nybegynder
23. august 2004 - 21:38 #4
tja, linieskift ved FROM, WHERE og ORDER BY:

exec("SELECT TOP 500 websitedk.Observationer.[Year], websitedk.Observationer.[Month], websitedk.Observationer.[Day], websitedk.Lokalitetslookup.Lokalitetsnavn, websitedk.Observationer.Navn, websitedk.Observationer.ID, websitedk.Artsliste.ID AS OBSID, websitedk.Lokalitetslookup.id AS LOKID, websitedk.Artsliste.Farvekode, websitedk.Artsliste.Artsnavn, websitedk.Artsliste.Latin, websitedk.Artsliste.Engelsk, websitedk.Artsliste.Gruppe, websitedk.Artsliste.Bilag, websitedk.Kommunekoder.Kommune, websitedk.Amtskoder.Amt, websitedk.Observationer.Antal, websitedk.Observationer.Alder, websitedk.Observationer.Sex, websitedk.Observationer.Aktivitet, websitedk.Observationer.Start1, websitedk.Observationer.Start2, websitedk.Observationer.Slut2, websitedk.Observationer.Slut1, websitedk.Observationer.Kommentar, websitedk.Observationer.IndtastTime, websitedk.Observationer.UpdateTime, websitedk.Observationer.Egenobs, websitedk.Observationer.BrugerID, websitedk.Messages.Emne
FROM websitedk.Kommunekoder RIGHT OUTER JOIN websitedk.Artsliste RIGHT OUTER JOIN websitedk.Lokalitetslookup LEFT OUTER JOIN websitedk.Messages ON websitedk.Lokalitetslookup.id = websitedk.Messages.LokalitetsID RIGHT OUTER JOIN websitedk.Observationer ON websitedk.Lokalitetslookup.id = websitedk.Observationer.LokalitetsID ON websitedk.Artsliste.ID = websitedk.Observationer.ArtsID ON websitedk.Kommunekoder.Kommunenummer = websitedk.Lokalitetslookup.Kommunenummer LEFT OUTER JOIN websitedk.Amtskoder ON websitedk.Lokalitetslookup.amtsnummer = websitedk.Amtskoder.Amtsnummer
WHERE (" + @farvekode + ") AND (" + @gruppe + ") AND (" + @amtsnavn + ") AND (" + @observer2 + ")
ORDER BY websitedk.Observationer.[Year] DESC, websitedk.Observationer.[Month] DESC, websitedk.Observationer.[Day] DESC, websitedk.Lokalitetslookup.Lokalitetsnavn, websitedk.Observationer.Navn DESC, websitedk.Observationer.ID DESC")
Avatar billede arne_v Ekspert
23. august 2004 - 21:41 #5
Kan du prøve med det i en linie ?
Avatar billede bzz_rar Nybegynder
23. august 2004 - 21:47 #6
Det har jeg nu prøvet - det giver samme fejl...
Avatar billede arne_v Ekspert
23. august 2004 - 21:49 #7
Prøv lige og erstat " med '
Avatar billede bzz_rar Nybegynder
23. august 2004 - 22:02 #8
det hjælper ikke - men hvis jeg sletter

"WHERE (" + @farvekode + ") AND (" + @gruppe + ") AND (" + @amtsnavn + ") AND (" + @observer2 + ")"

er der ingen problemer - syntaksen må være forkert..
Avatar billede arne_v Ekspert
23. august 2004 - 22:06 #9
Det er en ganske simpel streng operation - det er bare at få checket at ' erne står
rigtigt.
Avatar billede bzz_rar Nybegynder
23. august 2004 - 22:08 #10
arrghh ... der manglede et par kommaer her:

@farvekode nvarchar (255),
@gruppe  nvarchar (255)
@amtsnavn  nvarchar (255)
@observer2  nvarchar (255)


Hvordan er det nu man giver points? Du fortjener dem!
Avatar billede arne_v Ekspert
23. august 2004 - 22:10 #11
Jeg skal ligge et svar
Avatar billede bzz_rar Nybegynder
23. august 2004 - 22:12 #12
Værsgo :-)
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