BEGIN TRANSACTION …

(by: Jasmin Azemović)

sp_MSforeachtable (re-write)

with 2 comments

Da, pokušam rezimirati problem koji sam imao prije par sedmica. Pojavila se potreba da u “staroj” bazi podataka, u svaku tabelu, dodam po jedan novi atribut tipa uniqueidentifier. Ništa posebno, ALTER TABLE ili desni klik na istu pa odabir opcije “Design”. Naravno, nema nikavih problema…osim jednog. Baza ima preko 150 tabela !!

Nisam mogao prihvatiti činjenicu da nema nekog  lakšeg, skrivenog načina za kaskadnu promjenu objekata bez obzira na njihov broj. Poznato je da je Microsoft, posebno u SQL Serveru krije određeni broj undocumented procedures. Radi se o skrivenim blokovima TSQL koda koji po običaju rade fantastične i cool stvari, ali problem je što je sve to “skriveno” od očiju globalne bazaške populacije. Kao po definiciji svaka nedokumentovane procedure nema podršku tj. drugim riječima, nemamo koga da pitamo. Parola je snađi se.

Rješene moga problema je pronađeno (nakon par sati lutanja) u proceduri:

sp_MSforeachtable

Iz samog imena “foreachtable” se vidi kako bi stvar trebala da funkcioniše. Na primjeru baze podataka pubs će Vam sve biti kristalno jasno. Dole navedeni primjer prvo dodaje GUID atribut tipa uniqueidentifier u sve tabele, a zatim isti i uklanja.

USE pubs
GO

-- Dodavanje iste kolone u sve tabele
EXEC sp_MSforeachtable 'ALTER TABLE ? ADD GUID uniqueidentifier NULL'

-- Uklanjanje prethodno dodane kolone
EXEC sp_MSforeachtable 'ALTER TABLE ? DROP COLUMN GUID'

Zaista bih volio da ima „skrivena“ procedura za promjenu imena svih objekata unutar baze ili servera, npr. da u ime svih sp’s dodamo „new“. Možda i ima 🙂

END TRANSACTION
Advertisements

Written by Jasmin Azemović

11/07/2011 at 11:32

Posted in Database, SQL, SQL Server, TSQL

2 Responses

Subscribe to comments with RSS.

  1. Dobra fora!
    Nego, što ne napišeš proceduru u CLR-u, pa onda staviš u “javno vlasništvo” 🙂

    Tomislav Bronzin

    12/07/2011 at 09:09

  2. Good stuff man, this is precisely what I needed to know.
    There are a number of other questions I got concerning this, but
    I suppose I cannot be greedy. One answer at a time.
    Back to the internet to discover what I need! Once again.
    … excellent post, nicely written!

    Jennifer

    30/03/2013 at 08:18


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: