Avatar billede thesurfer Nybegynder
30. oktober 2009 - 12:51 Der er 12 kommentarer og
1 løsning

varchar som parameter, Stored Procedure, MSSQL 2008

Hej folkens..

Problem: Hvordan sender jeg en varchar til stored procedure, MSSQL 2008?


Jeg kan nemt sende en INT til SP'en, og få VARCHAR ud:

    @BoligID int
   
AS

    SELECT    sagsnummer
    FROM    tblEjendom
    where id = @BoligID



Men jeg kan simpelthen ikke sende en VARCHAR ind og få en INT ud:


    @SagID varchar
   
AS

    SELECT    id
    FROM    tblEjendom
    where sagsnummer = @SagID


Hvis jeg putter '' uden om @SagID, bliver @SagID opfattet som en streng ("@SagID")..

Jeg har også prøvet på at caste @SagID til varchar, uden ''.. virker heller ikke..

Det skal lige siges, at hvis jeg bruger en VARCHAR værdi direkte, virker det fint.. altså:

where sagsnummer = 'abc123'
Avatar billede arne_v Ekspert
30. oktober 2009 - 13:55 #1
CREATE PROCEDURE foo (@s AS VARCHAR(255))
AS
SELECT * FROM bar WHERE something = @s
GO

boer virke
Avatar billede vespida Nybegynder
30. oktober 2009 - 15:13 #2
Hej Thesurfer

det er fordi du ikke angiver hvor mange teng din Varchar skal være på

prøv det her:

    @SagID varchar(250)
 
AS

    SELECT    id
    FROM    tblEjendom
    where sagsnummer = @SagID


så skulle det virke
Avatar billede janus_007 Nybegynder
31. oktober 2009 - 01:06 #3
hej thesurfer...

Lad mig hellere spørge dig om noget andet :) Hvorfor vil du sende en varchar til en sproc?
For mig at se laver du en simpel SQL som tager længere tid i sproc end ren SQL.
Avatar billede thesurfer Nybegynder
31. oktober 2009 - 04:03 #4
Hmm...


arne_v og vespida> I har demonstreret (forklaring kan udledes ud fra eksemplet) og forklaret, skal længden af varchar defineres..

Dog kunne jeg godt tænke mig at vide, hvorfor længden skal defineres.. for umiddelbart virker det ikke logisk for mig, da en varchar vel er en varchar..?


janus_007> I systemet har en bolig både id (primærnøglen/autonum.) og sagsnummer.. man skal kunne slå op på begge måder..
Sagen er dog den, at der pt ikke er et værktøj/side til opslaget, og at denne sproc afvikles direkte via "Server Explorer" i Visual Studio.. :-)



Points går til arne_v og vespida.. smid venligst svar, så får I 30 points hver.


PS: Jeg har også et RegEx/SQL-relateret spørgsmål i ASP Classic.. Nu ved jeg at arne_v er hardcore til RegEx, så jeg håber at han (eller andre) vil tage et kig:

http://www.eksperten.dk/spm/891079
Avatar billede arne_v Ekspert
31. oktober 2009 - 04:11 #5
Hvorfor længde er nødvendigt er et godt spørgsmaal.

Hvis jeg skulle gætte, saa ville jeg gætte på, at det at kende max. længden giver bedre mulighed for at optimere den interne kompilering af SP'en.
Avatar billede arne_v Ekspert
31. oktober 2009 - 04:11 #6
Og et svar.
Avatar billede verakso Nybegynder
02. november 2009 - 20:21 #7
en varchar vel er en varchar..?

Øhh og, en varchar skal da altid have længden defineret

http://msdn.microsoft.com/en-us/library/aa258242(SQL.80).aspx
Avatar billede arne_v Ekspert
03. november 2009 - 03:16 #8
Dit eget link siger:

When n is not specified in a data definition or variable declaration statement, the default length is 1. When n is not specified with the CAST function, the default length is 30.
Avatar billede verakso Nybegynder
03. november 2009 - 15:11 #9
Jeps, men der står også
"n must be a value from 1 through 8,000."....
Men hvis den deafult sættes til 1, så giver det jo også mening i spørgerens tilfælde..
Avatar billede thesurfer Nybegynder
03. november 2009 - 22:40 #10
Jeg lagde godt nok mærke til at den kun tog det første tegn, i et af mine eksempler..

Problemet er nok, at jeg "varchar" som en "streng".. dvs, et stykke "tekst" (bogstaver, tal, tegn osv..).. hvilket det nok også er i de fleste programmeringssprog..
Avatar billede arne_v Ekspert
04. november 2009 - 01:17 #11
TurboPascal/Delphi String har også en max length. Default er dog ikke 1.
Avatar billede arne_v Ekspert
22. november 2009 - 04:12 #12
Tid at få afsluttet her?
Avatar billede thesurfer Nybegynder
30. november 2009 - 00:06 #13
vespida er åbenbart ikke lige i nærheden.. :-)

vespida: skriv lige hvis du gerne vil have points.. disse points går til arne_v..
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

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