A meno che tu non stia scrivendo un'applicazione che sai per certo dovrà essere portatile o desideri solo informazioni di base, per impostazione predefinita utilizzerei le viste di sistema proprietarie di SQL Server per cominciare.
Lo Information_Schema
le viste mostrano solo gli oggetti compatibili con lo standard SQL-92. Ciò significa che non esiste una visualizzazione dello schema delle informazioni nemmeno per costrutti abbastanza semplici come gli indici (questi non sono definiti nello standard e vengono lasciati come dettagli di implementazione). Per non parlare delle funzionalità proprietarie di SQL Server.
Inoltre non è proprio la panacea per la portabilità che si possa presumere. Le implementazioni differiscono ancora tra i sistemi. Oracle non lo implementa affatto "out of the box" e i documenti MySql dicono:
Gli utenti di SQL Server 2000 (che segue anche lo standard) potrebbero notare una forte somiglianza. Tuttavia, MySQL ha omesso molte colonne che non sono rilevanti per la nostra implementazione e ha aggiunto colonne specifiche per MySQL. Una di queste colonne è la colonna ENGINE nella tabella INFORMATION_SCHEMA.TABLES.
Anche per i costrutti SQL bread and butter come i vincoli di chiave esterna, lo Information_Schema
le viste possono essere notevolmente meno efficienti da utilizzare rispetto a sys.
viste in quanto non espongono ID oggetto che consentirebbero query efficienti.
per esempio. Vedere la domanda Rallentamento della query SQL da 1 secondo a 11 minuti - perché? e piani di esecuzione.
INFORMATION_SCHEMA
sistema