Avatar billede pri Nybegynder
29. april 2002 - 10:58 Der er 8 kommentarer og
1 løsning

Update record i stored proc hvor kolonnenavn sendes med som param

Jeg har en stored proc som skal opdatere 50 kolonner. Den skal tage en ad gangen og kolonnerne er navngivet maal_1, maal_2, maal_3 osv.
For hver måling opdatere jeg den givne kolonne, men hvilken datatype skal der anvendes for at det accepteres.

Jeg ønsker at kalde min stored procedure med følgende parametre:

@SPC_ID int,
@MaalingNr nvarchar(5),
@Maalingvaerdi float(8)
AS
Update "MINTABEL"
Set
@MaalingNr = @MaalingVaerdi
where SPC_Id like @SPC_ID;
GO
Avatar billede bennytordrup Nybegynder
29. april 2002 - 11:02 #1
du er nødt til at bruge dynamisk SQL, dvs. opbygge din SQL i en variabel af typen varchar(x) og derefter udføre den med Exec.
Avatar billede pri Nybegynder
29. april 2002 - 11:09 #2
HAR DU EVT. ET LILLE EKSEMPEL PÅ DET
Avatar billede bennytordrup Nybegynder
29. april 2002 - 11:11 #3
...
as
  exec ('update MinTabel set [' + @MaalingNr + '] = @MaalingVaerdi where SPC_Id like @SPC_ID')
Avatar billede pri Nybegynder
29. april 2002 - 11:33 #4
Hvordan definerer jeg @MaalingNr som dynamisk længde. Hvad betyder + 'erne?, hvis jeg indsætter [' + @MaalingNr + '] som du har skrevet brokker den sig i syntaks.
Avatar billede ocp Nybegynder
29. april 2002 - 11:43 #5
Prøv dette i stedet:

  exec ('update MinTabel set [' + @MaalingNr + '] = ' + @MaalingVaerdi + ' where SPC_Id like ' + '''' + @SPC_ID + '''')

'-erne bruges fordi der opbygges en tekststreng som derefter eksekveres.
Avatar billede ocp Nybegynder
29. april 2002 - 11:48 #6
PS: Maalingnr kan IKKE have dynamisk længde (det kan man ikke i SQL Server), men du kan blot gøre @MaalingNr meget stor, dog max nvarchar(4000) eller varchar(8000).
I en forstand er nvarchar(4000) dog dynamisk: Den fylder ikke mere end du "hælder" i den.
Avatar billede pri Nybegynder
29. april 2002 - 12:04 #7
Den vil ikke æde @MaalingNr med +'er og firkantparantes!
Avatar billede ocp Nybegynder
29. april 2002 - 12:30 #8
Ååååhhh... Jeg skal lige huske at der skal stå

cast(@MaalingNr as nvarchar)

og

cast(@MaalingVaerdi as nvarchar)

i stedet for

@MaalingNr

og

@MaalingVaerdi

ellers kan den ikke finde ud af at samle udtrykket til en streng.
Avatar billede ocp Nybegynder
29. april 2002 - 12:31 #9
også @SPC_ID => cast(@SPC_ID as nvarchar)

Hvorfor skriver du iøvrigt "SPC_ID LIKE @SPC_ID"? Det korrekte ville være "SPC_ID = @SPC_ID" da LIKE benyttes til tekstsammeligning.
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