Allen,
Ik ben bezig met een SQL waarmee een structuur van de databae (SQL Server 2000) geupdate wordt. Dit moet over meerdere servers en moet dummy-proof zijn. Om het dummy proof te maken gebrui ik de Sys tables om te controleren of een tabel of kolom al bestaat. Normaal werkt dit prima behalve in dit geval:
ff pseudo code, het idee; Controleer of in tabel "test" een kolom is met de naam kolom1. Als dat zo is, dan moet er een update gedaan worden en daarna "kolom1" verwijderd.
De 1e keer dat alle code uitgevoerd moet worden, werkt het als een trein, maar zodra de code voor de 2e keer uitgevoerd word, kan "kolom1" niet gevonden worden (dat is logisch, die bestaat niet.
Doe ik nu het volgende:
waarbij de update uitgezet is en een else, dan krijg ik netjes te zien dat de update al een keer eerder gedaan is. Iemand enig idee waarom mijn update statement altijd uitgevoerd wil worden?
Ik ben bezig met een SQL waarmee een structuur van de databae (SQL Server 2000) geupdate wordt. Dit moet over meerdere servers en moet dummy-proof zijn. Om het dummy proof te maken gebrui ik de Sys tables om te controleren of een tabel of kolom al bestaat. Normaal werkt dit prima behalve in dit geval:
SQL:
1
2
3
4
5
6
| if (SELECT count(*) FROM SYSCOLUMNS WHERE ID = OBJECT_ID('test') AND Name = 'kolom1') > 0 begin Update test Set kolom2 = 'WaardeVankolom1' print 'Waarde in kolom1 veranderd' alter table kolom1 drop kolom1 end |
ff pseudo code, het idee; Controleer of in tabel "test" een kolom is met de naam kolom1. Als dat zo is, dan moet er een update gedaan worden en daarna "kolom1" verwijderd.
De 1e keer dat alle code uitgevoerd moet worden, werkt het als een trein, maar zodra de code voor de 2e keer uitgevoerd word, kan "kolom1" niet gevonden worden (dat is logisch, die bestaat niet.
Doe ik nu het volgende:
SQL:
1
2
3
4
5
6
7
8
| if (SELECT count(*) FROM SYSCOLUMNS WHERE ID = OBJECT_ID('test') AND Name = 'kolom1') > 0 begin --Update test Set kolom2 = 'WaardeVankolom1' print 'Waarde in kolom1 veranderd' alter table kolom1 drop kolom1 end else print 'De update is al een keer uitgvoerd' |
waarbij de update uitgezet is en een else, dan krijg ik netjes te zien dat de update al een keer eerder gedaan is. Iemand enig idee waarom mijn update statement altijd uitgevoerd wil worden?