Erst vor ein paar Tagen entdeckte ich, dass mir Microsoft einen ganz lange gehegten Wunsch erfüllt hat. Man kann mit SqlCmd Batches mit Variablen ausführen. Hier ein ganz primitives Beispiel:

use $(db);
select * from $(tab) where $(col)=$(val);

Bei der Ausführung mit SqlCmd kann man nun die konkrete Variablenwerte angeben:

sqlcmd.exe -S (local)\MYYUKON -E -i c:\mssqlclass2005\sql-batch_01.sql -v db=northwind tab=dbo.orders col=OrderID val=10250

Weil das bisher nicht ging, haben wir für unsere Anwendungen 1993 ein eigenes Batch-Program geschrieben, dass wir immer wieder auf die verschiedenen Versionen migriert haben. Als wir dann auf den SQL Server 2000 umgestiegen sind, wurde es völlig runderneuert. Mal schauen, ob wir es noch nach der geplanten Migration auf SQL Server 2005 brauchen…

Unser wichtigster Anwendungsfall: In Views und/oder Procedures unserer Anwendungen sind datenbankübergreifende Abfragen enthalten. Da aber erst bei der Installation (beim Kunden, wir schreiben Standardsoftware, also Massenware) der Name der Datenbanken festgelegt wird, können die Skripte erst um Schluss eingespielt werden. Da müssen die Skripte anstelle der Datenbanknamen variable Werte enthalten.