Welcome to Sign in | Help

Re: update pe un field

  •  01-22-2008, 9:37 AM

    Re: update pe un field

    noface:

    am o tabela cu 100 de inregustrari sa zicem. as vrea ca pe fieldul "compare" sa inserez o concatenare de mai mult fielduri.



    De ce vrei să faci asta? Vrei cumva să compari această coloană cu o coloană similară din altă tabelă, în scopul de a sincroniza doar rândurile care au fost modificate ? Dacă da, ar trebui să iei în considerare că:
    1. o simplă concatenare nu îţi sesizează anumite schimbări (de exemplu, din Prenume="Ion Gheorghe" şi Nume="Popescu" în Prenume="Ion" şi Nume="Gheorghe Popescu")
    2. o să fie dificil să iei în considerare tipul de date al fiecărei coloane
    3. rezultatul va ocupa un spaţiu destul de mare.

    Eu îţi sugerez să foloseşti funcţia CHECKSUM(*), care îţi furnizează un int provenit dintr-un checksum al tuturor coloanelor din rândul respectiv. Bineînţeles că şi această funcţie poate furniza acelaşi rezultat la mai multe rânduri diferite (în definitiv, acest lucru e o caracteristică a oricărei funcţie de hashing), dar este puţin probabil să se întâmple acest lucru cu două rânduri care au sens. Şi dacă vrei să fie şi mai puţin probabil, poţi să foloseşti funcţia HASHBYTES (disponibilă doar începând cu SQL Server 2005), dar aceasta necesită un argument de tip varchar, nvarchar sau varbinary (deci trebuie oricum să concatenezi valorile respective înainte).

    Dacă totuşi este vital ca această comparaţie să se efectueze exact (adică să sesizeze absolut orice modificări), atunci eu îţi recomand să compari fiecare coloană (ţinând cont şi de posibilitatea de a exista NULL-uri), după ce în prealabil ai făcut un join pe o coloană indexată (cum ar fi un PRIMARY KEY nemodificabil sau o coloană calculată cu funcţia CHECKSUM).

    Răzvan
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems