Vraag


Acties:
  • 0 Henk 'm!

  • Tha-PC-Legend
  • Registratie: Augustus 2002
  • Laatst online: 19:02
Ik heb twee databases. In database #1 heb ik een veld 'Body'. Hierin staat HTML data van een document. Middels een koppeling kopieer ik dit veld naar een andere database (database #2) naar tabel 'Data', veld 'Longtextfield1'.

In het veld staat dus HTML data met tekst, tags, opmaak etc.. Het kan dat in het document een afbeelding wordt gebruikt. Een stukje code zoals dit is dan zichtbaar:

src="Download.aspx?DocumentID={de2cb128-dffd-446c-9a15-292ca84fedda}"

Het kan ook zijn dat er meerdere afbeeldingen aanwezig zijn in het document, en daarmee in dit veld. Dit stukje code is dan meermaals aanwezig. Echter wel met een eigen GUID. Dus bijvoorbeeld:

src="Download.aspx?DocumentID={de2cb128-dffd-446c-9a15-292ca84fedda}"

en verderop in het veld nog een keer een andere afbeelding: src="Download.aspx?DocumentID={33ed5961-ac64-496e-aca8-2c1901fb95bc}"

Om de afbeelding goed te kunnen laten tonen in de (web)software die ik gebruik, zal er nog een 'RecordID' geplaatst moeten worden achter de GUID van de afbeelding. Dus, bijvoorbeeld:

src="Download.aspx?DocumentID={de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"

Iedere GUID heeft zijn eigen RecordID. De combinaties (DocumentID) GUID en RecordID zijn bekend en opgeslagen in de tabel 'DocumentData'. Iedere regel in deze tabel bevat een veld 'DocumentID' en een veld 'RecordID'. Ter illustratie:

code:
1
2
3
4
5
6
7
8
9
10
11
DocumentID                              RecordID
D4960B2A-3886-4655-8409-000308EBC71B    463193
BEBD7909-CB82-4B62-B72F-000AB5ADE0EC    463194
8B3572CB-42E6-41F1-9BF4-000B97EBCFBC    463195
D554E0A4-F642-4B6F-86AF-003246870289    463196
718E6D90-0804-4D3F-B0F9-003804D6786E    463197
6A17B0DA-1492-4BF2-A455-003ABB907903    463198
A5ADB083-5E1C-4204-83D2-0045289271C9    463199
FDE866D0-2E34-4E55-B62F-0054EE6E8514    463200
72A52F4B-311E-4401-BF6B-0063480DE3D5    463201
6816DBC1-C1CC-4C21-93B2-0087B7D6FBD7    462617


Mijn vraag: Hoe kan ik in tabel 'Data', veld 'LongTextfield1' achter iedere (DocumentID) GUID de corresponderende RecordID zetten? Wetende dat per record in veld 'LongTextfield1' meerdere DocumentID's aanwezig kunnen zijn. Tevens wetende dat de tabellen ieder uur gevoed wordt met nieuwe data en het RecordID hierbij direct toegevoegd moet worden. Ik wil hier graag een stored procedure voor gebruiken.

...

Relevante software en hardware die ik gebruik:
Microsoft SQL Server 2017
Orbis TaskCentre

...

Wat ik al gevonden of geprobeerd heb:
Middels een REPLACE commando in een stored procedure heb ik getracht, na dat de data wordt overgezet van database #1 naar database #2, het RecordID toe te voegen. De stored procedure wordt gevoed met data uit tabel 'DocumentData', waar de combinaties DocumentID / RecordID in aanwezig zijn:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE PROCEDURE [dbo].[Replace_Picture2] (
    @DocumentID UNIQUEIDENTIFIER,
    @RecordID VARCHAR(100)
) AS

BEGIN

UPDATE data
SET LongTextfield1 = REPLACE(CAST(LongTextfield1 AS VARCHAR(MAX)), LTRIM(CAST(@DocumentID as VARCHAR(100))) + '}', LTRIM(CAST(@DocumentID as VARCHAR(100))) + '}' + '&RecordID=' + @RecordID + '"')
WHERE 1=1

END

GO


Dit werkt niet. De stored procedure voegt iedere DocumentID / RecordID combinatie toe achter iedere DocumentID die hij kan vinden, met als gevolg dus een héle lange string.
Bovenstaande stored procedure is al diverse malen gewijzigd geweest, maar tot op heden zonder resultaat. Ook via Google (stackoverflow etc.) kan ik helaas geen antwoord vinden op mijn vraag. Heeft iemand een idee hoe dit aan te pakken? Mocht iets onduidelijk zijn dan licht ik e.e.a. graag toe.

Beste antwoord (via Tha-PC-Legend op 18-10-2020 17:55)


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als ik je SP goed lees replace je nu:

de2cb128-dffd-446c-9a15-292ca84fedda}
met:
de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"

Echter, een tweede keer zal de2cb128-dffd-446c-9a15-292ca84fedda} wéér matchen en krijg je:

de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"&RecordID=46170"

Is dat wat je ziet?

Probeer het dan eens zo:

Replace:
de2cb128-dffd-446c-9a15-292ca84fedda}"
met
de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"

De tweede keer zal 't niet (meer) matchen omdat de quotes niet meer achter de } staan en zal het ongebreidelde toevoegen van &RecordID... dus stoppen.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Alle reacties


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Kun je niet veel beter in download.aspx de DocumentId bij de RecordId zoeken? Scheelt een hoop geouwehoer met (dure) text-replaces etc.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Tha-PC-Legend
  • Registratie: Augustus 2002
  • Laatst online: 19:02
RobIII schreef op zondag 18 oktober 2020 @ 14:11:
Kun je niet veel beter in download.aspx de DocumentId bij de RecordId zoeken? Scheelt een hoop geouwehoer met (dure) text-replaces etc.
Wellicht heb je gelijk. Ik heb alleen de kennis niet om die aan te passen (plus die download.aspx is afkomstig van standaard software) en ben beperkt tot SQL.

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Als ik je SP goed lees replace je nu:

de2cb128-dffd-446c-9a15-292ca84fedda}
met:
de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"

Echter, een tweede keer zal de2cb128-dffd-446c-9a15-292ca84fedda} wéér matchen en krijg je:

de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"&RecordID=46170"

Is dat wat je ziet?

Probeer het dan eens zo:

Replace:
de2cb128-dffd-446c-9a15-292ca84fedda}"
met
de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"

De tweede keer zal 't niet (meer) matchen omdat de quotes niet meer achter de } staan en zal het ongebreidelde toevoegen van &RecordID... dus stoppen.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Tha-PC-Legend
  • Registratie: Augustus 2002
  • Laatst online: 19:02
RobIII schreef op zondag 18 oktober 2020 @ 14:19:
Als ik je SP goed lees replace je nu:

de2cb128-dffd-446c-9a15-292ca84fedda}
met:
de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"

Echter, een tweede keer zal de2cb128-dffd-446c-9a15-292ca84fedda} wéér matchen en krijg je:

de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"&RecordID=46170"

Is dat wat je ziet?

Probeer het dan eens zo:

Replace:
de2cb128-dffd-446c-9a15-292ca84fedda}"
met
de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"

De tweede keer zal 't niet (meer) matchen omdat de quotes niet meer achter de } staan en zal het ongebreidelde toevoegen van &RecordID... dus stoppen.
toon volledige bericht
Nou, wat ik eigenlijk zie is dat diverse GUID+RecordID combinaties (alle combinaties in tabel ‘DocumentData’ lijkt het wel) achter elkaar worden geplaatst tijdens de replace actie, dus:

Download.aspx?DocumentID=GUID1&RecordID1GUID2&RecordID2GUID3&RecordID3 etc.

Dit wordt dus zo langs als de combinaties beschikbaar in tabel ‘DocumentData’.

Echter, door jouw oplossing toe te passen zou ik denk ik ook moeten kunnen ondervangen dat dit gebeurd. Ik ga het eens proberen! :)

Waar ik nog wel bang voor ben is dat de SP niet de juiste GUIDs/RecordIDs op de juiste plaats zet, maar gewoon de eerste de beste pakt die hij tegen komt in tabel ‘DocumentData’. Maar, dat gaan we zien. Koppel ik terug!

Acties:
  • 0 Henk 'm!

  • Tha-PC-Legend
  • Registratie: Augustus 2002
  • Laatst online: 19:02
RobIII schreef op zondag 18 oktober 2020 @ 14:19:
Als ik je SP goed lees replace je nu:

de2cb128-dffd-446c-9a15-292ca84fedda}
met:
de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"

Echter, een tweede keer zal de2cb128-dffd-446c-9a15-292ca84fedda} wéér matchen en krijg je:

de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"&RecordID=46170"

Is dat wat je ziet?

Probeer het dan eens zo:

Replace:
de2cb128-dffd-446c-9a15-292ca84fedda}"
met
de2cb128-dffd-446c-9a15-292ca84fedda}&RecordID=46170"

De tweede keer zal 't niet (meer) matchen omdat de quotes niet meer achter de } staan en zal het ongebreidelde toevoegen van &RecordID... dus stoppen.
toon volledige bericht
Dit was 'm! De stored procedure plakt nu netjes de juiste RecordIDs achter de juiste GUIDs en doet dit slechts één keer. Heel erg bedankt voor je hulp!

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Tha-PC-Legend schreef op zondag 18 oktober 2020 @ 13:44:
Ik heb twee databases. In database #1 heb ik een veld 'Body'. Hierin staat HTML data van een document. Middels een koppeling kopieer ik dit veld naar een andere database (database #2) naar tabel 'Data', veld 'Longtextfield1'.
Opzich wat ik zou doen is je SP niet in een update statement zetten, maar de actie die je doet verwerken in je "koppeling".

Momenteel heb je simpelweg een periode dat je koppeling nieuwe data gekopieerd heeft terwijl je SP die nog niet geraakt heeft. En dan krijgt men dus niet gewenste links (lijkt me).

Het is uiteraard 100% afhankelijk van het aantal page-views etc etc etc. Hoe vaak dit voor gaat komen,

Alleen computer zijn zulke mooie snelle apparaten dat 1x in een miljoen best wel eens 1 per uur kan zijn...

Acties:
  • 0 Henk 'm!

  • Tha-PC-Legend
  • Registratie: Augustus 2002
  • Laatst online: 19:02
Gomez12 schreef op maandag 26 oktober 2020 @ 10:52:
[...]

Opzich wat ik zou doen is je SP niet in een update statement zetten, maar de actie die je doet verwerken in je "koppeling".

Momenteel heb je simpelweg een periode dat je koppeling nieuwe data gekopieerd heeft terwijl je SP die nog niet geraakt heeft. En dan krijgt men dus niet gewenste links (lijkt me).

Het is uiteraard 100% afhankelijk van het aantal page-views etc etc etc. Hoe vaak dit voor gaat komen,

Alleen computer zijn zulke mooie snelle apparaten dat 1x in een miljoen best wel eens 1 per uur kan zijn...
Ik heb een applicatie die aan de hand van een view de data over kopieert (de ‘koppeling’). Ik zou dan in die view die actie moeten verwerken. Ik zou alleen niet weten hoe.

Die zelfde applicatie voert daarna direct de stored procedure uit, na dat de data is over gekopieerd. Dit alles gebeurd ‘s nachts wanneer mijn (zakelijke) publiek op één oor ligt en is met een aantal minuten klaar.

Pageviews zijn ook dermate laag dat ik de kans minimaal acht dat de situatie zich voor doet dat een bezoeker een situatie treft waarbij hij data ziet die nog niet geraakt is door de SP. Ik ben het met je eens dat dit anders is wanneer er veel pageviews zouden zijn, deze actie frequenter uitgevoerd wordt en ook ‘s nachts bezoekers op de pagina zouden zijn (denk aan andere tijdzones). Dit alles is echter niet het geval en daarom is de huidige oplossing acceptabel.

Bedankt voor het meedenken (y)
Pagina: 1