Escrits destacats

Wikiloc o com voltar pel món amb seguretatWikiloc o com voltar pel món amb seguretat Avui us vull presentar una de les eines més interessants que estic utilitzant últimament, un portal web 2.0 que ens permetrà moure'ns arreu del món sense patir per si...

Readmore

Consells d'un geocacher novell per a un geocacher novellConsells d'un geocacher novell per a un geocacher novell Quan un s'inicia al geocaching, el millor que pot fer és fer-ho amb algú que ja coneix aquest activitat. En el meu cas, el primer que me'n va parlar va ser el meu cunyat...

Readmore

Ja m'he estrenat creant un geoamagatallJa m'he estrenat creant un geoamagatall Per fi, ja era hora, finalment ho he aconseguit. He creat el meu primer geoamagatall, és a dir, he amagat el meu primer tresor perquè qui vulgui el pugui trobar. Avui us...

Readmore

Apunts, cabòries i més Rss

Com actualitzar massivament els valors d’un camp de diferents taules

Publicat el : 25-01-2010 | Per : Roger | Dins : Dia a Dia, Informàtica, Internet, Programació

0

Una de les intencions que tenia amb el meu blog, és parlar també de tecnologia, però no només aquella que es relaciona amb l’oci, sinó també amb els problemes que hem trobo dia a dia a la feina. La setmana passada hem va tocar fer un script de SQL per revisar i canviar el format d’un camp. Això hem va permetre trobar una solució molt interessant.

Com sempre, quan un no és expert en una matèria el millor que pot fer és recòrrer a la xarxa per veure si algú ja ha solucionat el problema que vols resoldre. A mi m’ha tocat fer que tots els camps de totes les taules de la BBDD que continguin una matrícula només poden tenir números i lletres sense cap caracter especial.

El primer problema, quan tens una BBDD amb més de 100 taules és trobar les diferents taules que tenen un camp amb la matrícula. La solució és la següent:

SELECT name FROM sysobjects WHERE id IN ( SELECT id FROM syscolumns WHERE name like '%matricula%')

En aquesta sentència podem observar el següent:

  • sysobjects: Taula interna del SQL Server que conté totes les definicions d’objectes de les nostres BBDD.
  • syscolumns: Taula interna del SQL Server que conté totes les definicions de les columnes de tots els objectes de les nostres BBDD.

Amb aquesta sentència (query), estem buscant totes les columnes que continguin la paraula ‘matricula’ al seu nom. Per tant, hem suposat que qualsevol persona que hagi creat un camp per emmagatzemar la matrícula, com a mínim part del nom del camp inclourà el text: ‘matricula’. És per això que és molt important que a l’hora de treballar en equip, tothom segueixi una mateixa nomenclatura a l’hora de posar noms a camps de la BBDD.

Un cop fet això, arriba el més complicat. Hem d’actualitzar tots els camps ‘matricula’ a les taules on hi apareix, fent que només continguin lletres i números. Per fer-ho, he utilitzant el següent codi:

  • select * from NOMTAULA
  • while @@rowcount > 0
    1. update NOMTAULA
    2. set NOMCAMP = replace(NOMCAMP, substring(s, patindex(‘%[^a-zA-Z0-9 ]%’, NOMCAMP), 1), ”)
    3. where patindex(‘%[^a-zA-Z0-9 ]%’, NOMCAMP) <> 0
  • select * from NOMTAULA
  • Si analitzem aquest codi veurem el següent:

    1. Primer de tot seleccionem totes les dades d’una taula.
    2. Iniciem un bucle sempre i quant el número de registres que ens hagi retornat la sentència anterior sigui superior a 0 (existeixin regsitres)
    3. Executem la sentència d’actualització. (informeu-vos sobre les comandes replace, substring, patindex i les expressions regulars. Aquestes últimes són les que realment donen potència a la sentència)

    Amb tot plegat, un problema diari resolt i la meva primera entrada que parla de programació informàtica.

    Write a comment

    Advertise Here