Citat
"Am scris functia care imi returneaza caracteruul de care am nevoie pt
fiecare inregistrare in parte in conformitate cu cerintele
beneficiarului si functioneaza corect cand este folosita intr-un cursor
care ia pe rand fiecare inregistrare din tabel insa daca incerc sa o
rulez direct pe toate inregistrarile imi da eroare ..."
Asa cum ai zis si tu eroarea apare pt. ca modifici valorile din campul C4 (asa cel putin am inteles din ce ai scris in mesajul anterior), aceste modificari ducând la apariţia unor valori duplicat in indexul care admite doar VALORI UNICE C1+C2+C3+C4.
Pentru a evita aceasta eroare poti proceda astfel:
ALTER TABLE Tabel ALTER COLUMN c3 VARCHAR(36)
UPDATE Tabel SET c3 = newid()
... aici rulezi scriptul tau pentru toate inregistrarile ...
UPDATE Tabel SET c3 = NULL
Explicatii:
[1] Poti utiliza câmpul C3 într-un mod util dacă tot urmează să "ştergi" valorile acestui camp. Astfel defineşti C3 (de exemplu) de tip VARCHAR cu o dimensiune de 36 de caractere pentru a putea stoca GUIDuri. Valorile tip GUID au proprietatea de a fi unice cel puţin la nivelul aceluiaşi sistem de calcul/calculator (teoretic).
Având valori UNICE în campul C3 atunci ÎN MOD DIRECT indexul cu valori UNICE C1+C2+C3+C4 va avea perechi de valori (C1+C2+C3+C4) UNICE. Ca atare, orice valori vei avea in C4 indexul va respecta în permanenţă restricţia de a avea valori unice(mai corect perechi de valori pentru ca este un index compus şi nu un index simplu) CREATE UNIQUE INDEX ...
[2] Incarci GUIDuri unice in C3 din tabela.
[3] Rulezi script-ul scris de tine
[4] "Ştergi" valorile (mai precis GUIDurile) din câmpul C3 cu ajutorul unei comenzi UPDATE ... C3 = NULL