[MSSQL] Bijwerken van een ntext veld geeft error 7135

Pagina: 1
Acties:

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 10:26
Echt een probleem wat ik op vrijdag middag niet wil treffen.

De volgende Stored Procedure:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
CREATE PROCEDURE [dbo].[spMoveUserFiles]
@OldFolder Varchar(200),
@NewFolder Varchar(200)
 AS
set xact_abort on
begin tran

update t_document set documentlocation=replace(documentlocation,@OldFolder,@NewFolder)

declare @txtlen int
set @txtlen = len(@OldFolder)

declare @ptr binary(16)
declare @pos int
declare @id uniqueidentifier

declare curs cursor local fast_forward
for
select  productid,
    textptr(productdata),
    charindex(@OldFolder, productdata)-1
from 
    t_product 
where 
    productdata 
like 
    '%' + @OldFolder +'%'

open curs

fetch next from curs into @id, @ptr, @pos

while @@fetch_status = 0
begin
    print 'Text found in row id=' + Convert(varchar(100),@id) + ' at pos=' + cast(@pos as varchar)
    
    updatetext t_product.productdata @ptr @pos @txtlen @NewFolder

    fetch next from curs into @id, @ptr, @pos   
end
close curs
deallocate curs

commit tran
GO

Deze werkt een ntext veld bij door referenties naar afbeeldingen bij te werken van bijvoorbeeld "e:\application\userimages\" naar "c:\inetpub\application\userimages\".

Deze Stored procedure komt met een foutmelding:
code:
1
Deletion length 49 is not in the range of available text, ntext, or image data. Text found in row id=004AF8B8-D5D5-4E27-8C3D-5C05A64FEE3D at pos=-1 The statement has been terminated.


Ik heb gekeken met de SQL Profiler en deze gooit de volgende exception:
code:
1
Error: 7135, Severity: 16, State: 2
Error 7135 is dus bovenstaande foutmelding. Mijn collega zweert dat de stored procedure goed is, en meer dan een simpele syntax check kan ik niet doen.

Volgens de Profiler komt deze exception direct na:
SQL:
1
2
-- spMoveUserFiles
updatetext t_product.productdata @ptr @pos @txtlen @NewFolder


Het betreft hier een MSSQL 2000 machine.

Weet iemand hoe dit aan te pakken?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
als ik zo in de gauwigheid kijk gaat het fout als een oldFolder string niet voorkomt in de tekst... dan geeft charindex als resultaat 0... en komt er in @pos de waarde -1 te staan... en dan gaat het fout met de updatetext...

dus in mijn gedachte even om de updatetext een IF @pos >= 0 heen zetten

[ Voor 14% gewijzigd door P.O. Box op 30-03-2007 16:59 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 10:26
Hmm, daar heb je gelijk in.

Heb er nu
SQL:
1
2
    if (@pos >= 0)
    updatetext t_product.productdata @ptr @pos @txtlen @NewFolder

van gemaakt en de foutmelding is weg.
Nog even nagevraagd en mijn collega zegt praktisch hetzelfde :)
Inderdaad :D

[ Voor 24% gewijzigd door TeeDee op 31-03-2007 12:53 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Dezelfde collega als? ;)
Mijn collega zweert dat de stored procedure goed is,