Bei der Frage eines Kollegen wie viele Tabellen pro Datenbank der SQL-Server genau erlaubt, musste ich neulich ganz schön in den Handbüchern suchen. Bei Sybase SQL-Anywhere stand es unter "Limitations", bei Microsoft nicht. Aber die Suche bei Google führte mich ratz-fatz auf die Seite im Microsoft-Handbuch unter dem Titel "Maximum Capacity Specifications" für Version 2005 und Version 2000. (Schade, dass die Suche in der MSDN nicht ansatzweise so gut ist…)
Die kurze Antwort auf obige Frage wäre übrigens: 2.147.483.647
Es gibt aber eigentlich keine genaue Grenze für Tabellen: In den internen Systemtabellen werden alle Datenbankobjekte in einer gemeinsamen Tabelle verwaltet. (Ich schätze, dass ist beim SQL-Server-2005 immer noch so, obwohl mal die Tabellen der Ressource-DB nicht sehen kann). Die ID für diese Datenbank-Objekt ist ein einfacher INT, IDs müssen positiv sein. Daher kann es nur 2.147.483.647 Objekte geben. Dazu zählen: Tabellen (sowohl System als auch User-Defined), Views, Prozeduren (auch Extended), Funktionen, Defaults, Trigger, Primärschlüssel, Fremdschlüssel, Unique-Constraints und Checks.
Wenn man sich solche Fragen stellt, dann ist man meiner Erfahrung gerade dabei eine Anwendung zu schreiben, die an einer ganz anderen Engstelle hängen bleiben kann: Potentiell wir für alle die vielen Tabellen Platz in der TempDB benötigt. Die sollte so positioniert werden, dass sie nötigenfalls ordentlich wachsen kann.