[SQL] varchar/text in SP

Pagina: 1
Acties:
  • 220 views sinds 30-01-2008
  • Reageer

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 09:22

Altaphista

1. check manual, 2. ask

Topicstarter
In een stored procedure wil ik een megegeven 'text' inserten in een tabel, maar deze mag maar maximaal 'varchar(8000)' zijn van sql... met als gevolg dat mijn teksten worden afgekapt.
Hoe moet ik deze lokaal groter dan varchar(8000) declareren, want '@myVar = text' mag niet: Error 2739: The text, ntext and image variables are invalid for local variables

Je gaat het pas zien als je het doorhebt.


Verwijderd

geknipt SQL-server Transact help:

B. Use WRITETEXT to Change Text Data

This example puts the text pointer into the local variable @@ptrval, and then WRITETEXT places the new text string into the row pointed to by @@ptrval.

DECLARE @@ptrval varbinary(16)
SELECT @@ptrval = TEXTPTR(pr_info)
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'
WRITETEXT pub_info.pr_info @@ptrval 'New Moon Books (NMB) has just released another top ten publication. With the latest puglication this makes NMB the hottest new publisher of the year!'


Note that publication is spelled incorrectly (puglication) in this example. In example C, this value is corrected with UPDATETEXT.

C. Use UPDATETEXT to Modify Text Data

This example puts the text pointer into the local variable @@ptrval, and then uses UPDATETEXT to update the spelling error in example B.

DECLARE @@ptrval varbinary(16)
SELECT @@ptrval = TEXTPTR(pr_info)
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'
UPDATETEXT pub_info.pr_info @@ptrval 88 1 'b'
go

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 09:22

Altaphista

1. check manual, 2. ask

Topicstarter
Thnx, ik kijk er even naar.

Je gaat het pas zien als je het doorhebt.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Altaphista schreef op 16 september 2002 @ 13:24:
In een stored procedure wil ik een megegeven 'text' inserten in een tabel, maar deze mag maar maximaal 'varchar(8000)' zijn van sql... met als gevolg dat mijn teksten worden afgekapt.
Hoe moet ik deze lokaal groter dan varchar(8000) declareren, want '@myVar = text' mag niet: Error 2739: The text, ntext and image variables are invalid for local variables
Je geeft een text mee die je vervolgens in een lokale variabele stopt? Waarom zou je dat doen?
Als je hem nu gewoon rechtstreeks in de db insert, heb je dit probleem niet.

Never underestimate the power of


  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 09:22

Altaphista

1. check manual, 2. ask

Topicstarter
cameodski schreef op 16 september 2002 @ 15:01:
[...]

Je geeft een text mee die je vervolgens in een lokale variabele stopt? Waarom zou je dat doen?
Als je hem nu gewoon rechtstreeks in de db insert, heb je dit probleem niet.
in de stored procedure haal ik een variabele uit een tabel en wil ik deze opslaan om in een obect te stoppen (dat wel text ondersteunt. rechtstreeks opslaan wil niet) Als ik vervolgens terugkeek in het object, zag ik dat de tekst was afgekapt.
ben nu aan het prutsen met READTEXT en WRITETEXT...

[ Voor 0% gewijzigd door Altaphista op 16-09-2002 15:25 . Reden: aanpassing ]

Je gaat het pas zien als je het doorhebt.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Tot nu toe heb ik altijd kunnen voorkomen, dat ik UPDATETEXT, WRITETEXT enz. moest gebruiken, want dat is niet leuk.
Post anders je sp hier eens. Er is misschien wel een andere mogelijkheid om dit probleem op te lossen.

Never underestimate the power of


  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 09:22

Altaphista

1. check manual, 2. ask

Topicstarter
cameodski schreef op 16 september 2002 @ 15:53:
Tot nu toe heb ik altijd kunnen voorkomen, dat ik UPDATETEXT, WRITETEXT enz. moest gebruiken, want dat is niet leuk.
Post anders je sp hier eens. Er is misschien wel een andere mogelijkheid om dit probleem op te lossen.
OK, hier is tie dan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
declare @mailobject ...,
 --nog een aantal vars...
 @hetbericht binary(16)

SELECT (...), @hetbericht = TEXTPTR(het_bericht) FROM emails WHERE ...
--EN DAN HIER DE WRITE/READTEXT

--mailobject aanmaken
--mailobject aangemaakt

exec @hr = sp_OASetProperty @mailobject , 'HTMLBody', @hetbericht

--mail versturen


Bij de WRITETEXT/READTEXT gaat het fout (beide al geprobeerd), want ik krijg het mailtje wel, maar volgens mij alleen een adresgeheugen. :|

Hoop dat je er wat van kan maken :)

Je gaat het pas zien als je het doorhebt.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Altaphista schreef op 16 september 2002 @ 16:12:
Bij de WRITETEXT/READTEXT gaat het fout (beide al geprobeerd), want ik krijg het mailtje wel, maar volgens mij alleen een adresgeheugen. :|
Ja, dat kan kloppen, want je geeft een pointer mee als parameter, terwijl er een stuk tekst in moet.

Maar is het misschien niet handiger om dit in je applicatie te doen. SQL Server biedt inderdaad allerlei leuke faciliteiten, maar af en toe zijn ze net niet af.
En misschien(?) is dit er wel één van.

Never underestimate the power of


  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 09:22

Altaphista

1. check manual, 2. ask

Topicstarter
cameodski schreef op 16 september 2002 @ 19:39:
[...]

Ja, dat kan kloppen, want je geeft een pointer mee als parameter, terwijl er een stuk tekst in moet.

[...].
ja, maar hoe haal ik de tekst dan uit de pointer om dit in een textvariabele te 'writen'? Lijkt mij dat dat juist moet kunnen.

Je gaat het pas zien als je het doorhebt.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Met READTEXT. Maar ik betwijfel of ie dat pikt.

Never underestimate the power of


  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 09:22

Altaphista

1. check manual, 2. ask

Topicstarter
cameodski schreef op 17 september 2002 @ 11:11:
Met READTEXT. Maar ik betwijfel of ie dat pikt.
:) ook al geprobeerd. Ook een error...

Maar ik wil dus de waarde uit een text-veld uit een tabel toewijzen aan de variabele in de stored procedure... en deze moet langer kunnen zijn dan varchar(8000) toch :? Of is het zo raar om dit te willen?

Je gaat het pas zien als je het doorhebt.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Kun je eigenlijk wel een parameter van het type TEXT meegeven aan sp_OASetProperty?
Is het een idee om een dummy parameter van het type TEXT mee te geven aan je sp.
Dan kun je die gebruiken om je data in te plakken. Elke keer mbv SUBSTRING een stukje uit je db lezen en toevoegen aan de dummy parameter.
Met DATALENGTH kun je bepalen hoelang je text veld in de db is.

Never underestimate the power of


  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 09:22

Altaphista

1. check manual, 2. ask

Topicstarter
cameodski schreef op 17 september 2002 @ 12:05:
Kun je eigenlijk wel een parameter van het type TEXT meegeven aan sp_OASetProperty?
Is het een idee om een dummy parameter van het type TEXT mee te geven aan je sp.
Dan kun je die gebruiken om je data in te plakken. Elke keer mbv SUBSTRING een stukje uit je db lezen en toevoegen aan de dummy parameter.
Met DATALENGTH kun je bepalen hoelang je text veld in de db is.
Het probleem is niet dat je dit niet kunt meegeven aan het object, maar dat MSSQL niet wil dat je een variabele text definieert in een stored procedure. Je kunt dus wel een text-type meegeven, maar lokaal in de SP kapt ie m af.

Ik ben dus op zoek naar een manier om dit te omzeilen: dus een var in de SP die meer dan 8000 (tekst)chars kan bevatten...
Het opsplitsen lijkt mij tot nu toe de enige oplossing... :|

Je gaat het pas zien als je het doorhebt.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Ja, een lokale variabele van het type TEXT kan inderdaad niet. Daarom had ik het in mijn vorige reply ook over een dummy parameter die je aan je sp meegeeft.

Never underestimate the power of


  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 09:22

Altaphista

1. check manual, 2. ask

Topicstarter
cameodski schreef op 17 september 2002 @ 13:01:
Ja, een lokale variabele van het type TEXT kan inderdaad niet. Daarom had ik het in mijn vorige reply ook over een dummy parameter die je aan je sp meegeeft.
:) was koel als het was gelukt, maar MSSQL is niet zo simpel te misleiden benk bang:
de error:
Server: Msg 409, Level 16, State 1, Procedure my_procedurename, Line 46
The assignment operator operation cannot take a text data type as an argument.

Je gaat het pas zien als je het doorhebt.


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Ja, maar als je die parameter nu eens vult via UPDATETEXT? Want dat doe je volgens mij nog niet.

Never underestimate the power of


  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 09:22

Altaphista

1. check manual, 2. ask

Topicstarter
nu heb ik het wel gedeeltelijk voor elkaar, maar zoals cameodski al eerder zei, lukt het niet om text aan een sp_OASetProperty mee te geven. How do I solve this one now? Het wordt gewoon afgekapt.

Je gaat het pas zien als je het doorhebt.


  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 09:22

Altaphista

1. check manual, 2. ask

Topicstarter
AAARGH

Het is een BUG :(

http://support.microsoft....px?scid=KB;EN-US;Q325492&

:'(

[ Voor 0% gewijzigd door Altaphista op 17-09-2002 15:20 . Reden: url ]

Je gaat het pas zien als je het doorhebt.

Pagina: 1