|
| Hjælp til at skrive en sætning i en Stored~ Fra : oz |
Dato : 16-12-01 19:13 |
|
Hej NG
Jeg har nu forsøgt at læse utallige bøger om SP men der er blandt mange ting
en ting jeg ikke helt forstår???
Hvorfor kan jeg ikke bruge IN funktionen i en SP, jeg kan bruge LIKE, OR,
AND og BETWEEN men ikke IN den siger der er en syntax fejl...
Er der nogen der ved hvorfor?
Syntaxe fejlen opstår når jeg vil gemme min SP, dvs. det kan ikke engang
være fordi den får forkerte data....
WHERE
News.NewsID IN '(' + @NewsID + ')' -- Giver syntaxe fejl
--News.NewsID IN @NewsID virker heller ikke giver også syntaxe fejl.
Håber der er nogen der kan hjælpe mig med det =)
På forhånd tak
Oz
| |
Peter Lykkegaard (16-12-2001)
| Kommentar Fra : Peter Lykkegaard |
Dato : 16-12-01 20:54 |
|
"oz" <gonzo@strike-team.com> wrote in message
news:9vio6t$q7m$1@sunsite.dk...
> WHERE
> News.NewsID IN '(' + @NewsID + ')' -- Giver syntaxe fejl
> --News.NewsID IN @NewsID virker heller ikke giver også syntaxe fejl.
>
Syntaksen er
WHERE News.NewID IN (1, 2, 3)
Eller
WHERE News.NewID IN ('A', 'B', 'C')
mvh/Peter Lykkegaard
| |
oz (16-12-2001)
| Kommentar Fra : oz |
Dato : 16-12-01 21:17 |
|
"Peter Lykkegaard" <polonline@hotmail.com> skrev:
> WHERE News.NewID IN (1, 2, 3)
>
> Eller
> WHERE News.NewID IN ('A', 'B', 'C')
Hej Peter
Ja jeg er med på at syntaksen ser sådanne ud, men jeg har nok ikke forklaret
mig godt nok..
Hos mig drejer det sig om en SP som modtager parametre fra en ASP side for
at skabe en dynamisk forespørgsel.
Med andre ord indeholder @NewsID en variabel som kunne være =
('x','y','z'......).
Håber at du kan forstå mit dilemma s`?
Oz
| |
Klaus Ambrass (17-12-2001)
| Kommentar Fra : Klaus Ambrass |
Dato : 17-12-01 08:57 |
|
"oz" <gonzo@strike-team.com> wrote in news:9vivfc$dvp$1@sunsite.dk:
> Hos mig drejer det sig om en SP som modtager parametre fra en ASP side
> for at skabe en dynamisk forespørgsel.
>
> Med andre ord indeholder @NewsID en variabel som kunne være =
> ('x','y','z'......).
>
> Håber at du kan forstå mit dilemma s`?
>
> Oz
Hej Oz,
hvis din @newsID="('x','y','z'...)" så skal du bare fjerne '(' og ')' fra din
oprindelige kode.
/Klaus
--
| |
oz (17-12-2001)
| Kommentar Fra : oz |
Dato : 17-12-01 15:48 |
|
"Klaus Ambrass" <ambrass@vip.cybercity.dk> skrev
> hvis din @newsID="('x','y','z'...)" så skal du bare fjerne '(' og ')' fra
din
> oprindelige kode.
Tak for dit svar, men jeg tror vi taler forbi hinanden...
Problemet er ikke syntaksen af IN sætningen den er jeg med på, tror jeg =).
Men mit problem er at den ikke anerkender IN i min SP, den siger at der er
en syntakse fejl i nedenstående eksempel og derfor kan jeg ikke gemme min
SP, så det er ikke variablen (@NewsID) men syntaksen med IN der er forkert,
ved du hvorfor?
Dette giver mig et syntakse problem hvor jeg ikke kan gemme min SP
WHERE
NewsID IN @NewsID -- hvor @NewsID indeholder en variabel (x,y,z.....)
eller ('x','y','z'......)
Håber at jeg fik forklaret mig rigtigt denne gang...
Oz
| |
oz (17-12-2001)
| Kommentar Fra : oz |
Dato : 17-12-01 20:39 |
|
"oz" <gonzo@strike-team.com> skrev:
> "Klaus Ambrass" <ambrass@vip.cybercity.dk> skrev
>
> > hvis din @newsID="('x','y','z'...)" så skal du bare fjerne '(' og ')'
fra
> din
> > oprindelige kode.
Du har da fuldstændig ret i det du skriver, beklager jeg ikke så det før jeg
skrev det andet indlæg.... Nogle gange skal jeg lige helt forstå det skrevne
inden jeg svarer sorry =)
Yderlige ser jeg til min gru at jeg har lavet endnu en fejl i mit indlæg og
det er, at det ikke drejer sig om VARCHAR's ('x','y','z',...) værdier men
INT værdier i stedet ('8','23','44', osv....)
Jeg ser en problematik i at overføre ('8','23','44', osv....) som integer da
den jo ikke er en int værdi, den eneste mulighed jeg ser er at overføre
('8','23','44', osv....) som en VARCHAR, men det vil igen ikke anerkendes af
Databasen da den forventer en int værdi...
Der må da være en løsning på det problem =( Ellers må jeg jo lave en OR
funktion i stedet for, men den er jo ikke så hurtig som IN, men det må jeg
evt. leve med eller har du evt. et godt forslag???
Table News indeholder
NewsID int
Heading varchar (50)
Teaser varchar (150)
Body varchar (4000)
Email varchar (50)
Link varchar (50)
Min SP er således ud
CREATE PROCEDURE News
@NewsID varchar (20) = NULL --Har jeg også forsøgt men giver denne fejl kan
ikke converte varchar til int
--@NewsID int = NULL --Har jeg også forsøgt men giver denne fejl kan ikke
converte varchar til int
AS
SET NOCOUNT ON
SELECT *
FROM News
WHERE
News.NewsID IN (@NewsID) --Du havde ret ( ) omkring virker =)
Min ASP side indeholder:
Blandt andet en søge formular hvor man skal kunne vælge flerer Artikler på
en gang disse overføres via ASP til @NewsID som varchar da jeg ikke syntes
at kunne overføre dem på andre måder....
Så nu håber jeg at jeg fik forklaret mig ordentligt og du kan forstå hvad
jeg har problemer med....
Oz
| |
Peter Lykkegaard (17-12-2001)
| Kommentar Fra : Peter Lykkegaard |
Dato : 17-12-01 20:42 |
|
"oz" <gonzo@strike-team.com> wrote in message
news:9vlhk9$67g$1@sunsite.dk...
>
> Der må da være en løsning på det problem =( Ellers må jeg jo lave en OR
> funktion i stedet for, men den er jo ikke så hurtig som IN, men det må jeg
> evt. leve med eller har du evt. et godt forslag???
>
Lav din SQL dynamisk og brug sp_ExecuteSQL
Dvs
Declare @Values VarChar(200)
Declare @SQL NVarChar(200)
Set @Values = '1, 2, 3, 4, 5'
Set @SQL = N'Select * From MyTabel Where MyID IN (' + @Values + ')'
Exec sp_ExecuteSQL @SQL
Burde kunne gøre det
mvh/Peter Lykkegaard
| |
oz (17-12-2001)
| Kommentar Fra : oz |
Dato : 17-12-01 22:01 |
|
"Peter Lykkegaard" <polonline@hotmail.com> skrev:
> Lav din SQL dynamisk og brug sp_ExecuteSQL
>
> Dvs
>
> Declare @Values VarChar(200)
> Declare @SQL NVarChar(200)
>
> Set @Values = '1, 2, 3, 4, 5'
> Set @SQL = N'Select * From MyTabel Where MyID IN (' + @Values + ')'
>
> Exec sp_ExecuteSQL @SQL
Jamen Peter det virker jo meget godt =), nu skal jeg bare bygge videre på
den for at tilføje flere variabler for at give folk flere muligheder...
Jeg har omskrevet dit eksempel lidt til dette:
CREATE PROCEDURE Test_Search_2
@NewsID VarChar (50)
AS
Declare @_NewsID VarChar(50)
Declare @_SQL NVarChar(200)
Set @_NewsID = @NewsID
Set @_SQL = N'Select * From News Where NewsID IN (' + @_NewsID + ')'
Exec sp_ExecuteSQL @_SQL
For at lave den dynamsik, men det ligger sikkert underforstået i dit
svar....
Dog har jeg lige et tillægs spørgsmål!! Hvad nu hvis man vil se alle
artikler??? Altså ikke bare '1, 2, 3, 4, 5, osv...' men alle?? Lad os sige
der 10.000 artikler hvad så ?? Skriver jeg (1, 2, optil .... 10.000) nej
vel... Er der en værdi jeg kan sætte ind for at vælge alle???
Jeg har forsøgt med NULL men det duer ikke ej heller '' da der jo ikke er
nogle NewsID med disse værdier, men hvilket tegn kan jeg bruge for at vælge
alle???
Håber du svarer =)
Med venlig hilsen
oz
| |
Peter Lykkegaard (18-12-2001)
| Kommentar Fra : Peter Lykkegaard |
Dato : 18-12-01 15:42 |
|
"oz" <gonzo@strike-team.com> wrote in message
news:9vlmdi$kd0$1@sunsite.dk...
(...)
> Set @_SQL = N'Select * From News Where NewsID IN (' + @_NewsID + ')'
(...)
>
> Dog har jeg lige et tillægs spørgsmål!! Hvad nu hvis man vil se alle
> artikler??? Altså ikke bare '1, 2, 3, 4, 5, osv...' men alle?? Lad os sige
> der 10.000 artikler hvad så ?? Skriver jeg (1, 2, optil .... 10.000) nej
> vel... Er der en værdi jeg kan sætte ind for at vælge alle???
>
Ja og nej....
Du kan undlade din værdi
If Len(@_NewsID) > 0
Begin
Set @_SQL = N'Select * From News Where NewsID IN (' + @_NewsID + ')'
End
Else
Begin
Set @_SQL = N'Select * From News
End
mvh/Peter Lykkegaard
| |
oz (18-12-2001)
| Kommentar Fra : oz |
Dato : 18-12-01 22:39 |
|
"Peter Lykkegaard" <polonline@hotmail.com> skrev:
> If Len(@_NewsID) > 0
> Begin
> Set @_SQL = N'Select * From News Where NewsID IN (' + @_NewsID + ')'
> End
> Else
> Begin
> Set @_SQL = N'Select * From News
> End
Jeps Peter
Det er netop noget i den stil jeg leder efter..
Tak for alt inputtet fra alle også dig, nu vil jeg gå i tænke boksen og
prøve nogle forskellige tiltag...
Jeg melder mig sikkert igen snart =)
Oz
| |
Nikolaj Kolbe (18-12-2001)
| Kommentar Fra : Nikolaj Kolbe |
Dato : 18-12-01 00:28 |
|
| |
|
|