2010-12-08 47 views
0

À la lecture INFORMATION_SCHEMA vs sysobjects, je voulais poser la question suivante:Pourquoi sys.objects n'est-il pas disponible en tant qu'objet et quels sont les schémas par défaut recherchés par SQL Server?

SQL Server 2005/2008 - Why is the sys.sysobjects view available to users without the schema name?
qui semble être déjà demandé, mais je ne trouve pas que les réponses ont répondu à la question (posée).

Pourquoi sysbjects est-il disponible en tant que sys.sysobjects si le schéma sys n'existait pas dans les versions antérieures de SQL Server?
(l'explication est que ce soit pour la compatibilité avec les versions antérieures de SQL Server)

Puis, the answer by Barry:

SQL Server recherche des objets dans l' ordre suivant:

  1. sys schema
  2. schéma des utilisateurs (Ceci est différent pour les processus stockés - il va regarder dans le stroed procs schéma plutôt que le schéma des utilisateurs.
  3. schéma dbo

a laissé en suspens la question par Shaun dans les commentaires:
Pourquoi sys.objects n'est pas interrogeable sans "sys." pefix (comme objets)? Quels sont les schémas par défaut recherchés par SQL Server et dans quel ordre?

Répondre

1

Le schéma par défaut de l'utilisateur est recherché, puis le schéma dbo est recherché. Le schéma sys n'est jamais recherché, à moins qu'il ne soit explicitement spécifié (par exemple, sys.objects). Toutefois, pour les vues de compatibilité descendante (par exemple sysobjects), il existe une logique particulière: le schéma, même s'il est spécifié, est ignoré et la vue du schéma sys est utilisée. Puisque le code plus ancien ne créerait jamais une table appelée "dbo.sysobjects", ce n'est pas un problème, car ces vues sont présentes pour la rétrocompatibilité, et ne devraient pas être utilisées pour un développement futur.

amuseront, sysobjects:

create table dbo.sysobjects (
    ID int not null 
) 
go 
select * from dbo.sysobjects 
go 

(Pour ceux qui ne veulent pas courir - vous obtenez toujours la pleine puissance sysobjects, et non une table vide avec une colonne).

+0

+1 Avez-vous plus de plaisir et de jeux pour moi? –