ceturtdiena, 2011. gada 1. septembris

Kolonnas pārsaukšana visās tabulās

Parasti jau kolonnas pārsaukšana notiek katrā tabulā individuāli caur SSMS interfeisu vai arī ar sp_rename palīdzību. Bet, veidojot jaunu datu bāzi, kurā vēl nav izveidoti skati/funkcijas/procedūras/programmas, kas būtu atkarīgi no attiecīgā kolonnas nosaukuma, radās vajadzība mainīt kolonnas nosaukumu uzreiz vairākās tabulās.

Lai skripts būtu noderīgs, ir svarīgi, ka kolonnas nosaukums nozīmē pilnīgi vienu un to pašu visās vietās, kur šis nosaukums izmantots. Tātad, piemēram, 'CustomerID' var būt 20 tabulās, bet nekad nebūs tā, ka vienā tabulā 'CustomerID' ir atslēgas lauks uz vienu tabulu, kamēr citā vietā atslēgas lauks uz citu tabulu..

Skripts (iet cauri visām datu bāzes tabulām un, ja tabulā ir kolonna ar norādīto nosaukumu, pārsauc to):
Declare @NewColumName nvarchar(50)
Declare @OldColumName nvarchar(50)

-- Ievadam kolonnu nosaukumus šeit!!!
Set @OldColumName = ''
Set @NewColumName = ''

Declare @com as NVarChar(1000)
Set @com =
    '
    IF (Select Count(*) From sys.Columns Where object_id = OBJECT_ID(''?'') And Name = ''' + @OldColumName + ''') > 0
    Begin
        print ''Mainīts nosaukums tabulā ?''
        EXEC sp_rename ''?.' + @OldColumName + ''', ''' + @NewColumName + ''', ''COLUMN''
    End
    '
print 'Izmaiņas: '
EXECUTE sp_msForEachTable @com;
Papildināts:
Un radās vajadzība arī datu tipus pamainīt, tur tieši tā pati ideja (starp citu, es šos abus skriptus ieliku divās procedūrās, man vismaz tas process tīri labi patīk):
Declare @ColumName nvarchar(50)
Declare @AlterStatement nvarchar(500)

Set @ColumName = 'HelloColumn'
Set @AlterStatement = 'Alter Column HelloColumn Date' --piemērs

Declare @com as NVarChar(1000)
Set @com =
    '
    IF (Select Count(*) From sys.Columns Where object_id = OBJECT_ID(''?'') And Name = ''' + @ColumName + ''') > 0
    Begin
        print ''Mainīts tips tabulā ?''
        Alter Table ?
            ' + @AlterStatement + '
    End
    '
print 'Izmaiņas: ';
Exec sp_msForEachTable @com;

Nav komentāru:

Komentāra publicēšana