7
votes

Comment exclure la table du système lors de la requête Sys.Tables?

je cours ce SQL: xxx pré>

et le résultat est le suivant: p> xxx pré>

sysdiagrams code> est une table système code> mais montrée en résultat. p>

mise à jour: strong> Merci à tous pour vos réponses et vos commentaires, j'utilise Nate Bolam Bolam Strong> & vmvadivel fort> Réponses: P>

SELECT S.name as Owner, T.name as TableName 
FROM  
  sys.tables AS T
    INNER JOIN sys.schemas AS S ON S.schema_id = T.schema_id
    LEFT JOIN sys.extended_properties AS EP ON EP.major_id = T.[object_id]
WHERE 
  T.is_ms_shipped = 0 AND 
  (EP.class_desc IS NULL OR (EP.class_desc <>'OBJECT_OR_COLUMN' AND 
  EP.[name] <> 'microsoft_database_tools_support'))


2 commentaires

is_ms_shiped peut être une meilleure propriété à utiliser, si vous souhaitez également exclure par ex. Objets ajoutés à la base de données pour prendre en charge la réplication (alors que la réponse sélectionnée n'est utile que pour l'exclusion, en particulier les objets ajoutés aux schémas de support)


@Damien_the_unbeliever: Malheureusement, que sysdiagrams ne dispose pas de is_ms_shipped = 1 défini - il ne sera donc pas affecté lorsque vous essayez d'exclure toutes les tables système


3 Réponses :


1
votes

Voulez-vous s'il vous plaît essayer avec la requête ci-dessous, merci xxx


2 commentaires

Merci de votre réponse, je pense que cela n'exclurea que sysdiagrams , mais je veux savoir si une manière générique d'exclure toute la table du système.


Habituellement, dans chaque base de données créée, une seule table système nommée sysdiagrams , afin que nous puissions aller avec la requête ci-dessus, merci pour votre temps.



10
votes

SSMS utilise une propriété étendue pour marquer la table SysDiagrams comme une sorte de pseudo system table.

Essayez ceci: p>

SELECT S.name as Owner, T.name as TableName FROM  sys.tables AS T
INNER JOIN sys.schemas AS S ON S.schema_id = T.schema_id
LEFT JOIN sys.extended_properties AS EP ON EP.major_id = T.[object_id]
WHERE (EP.class_desc IS NULL 
OR (EP.class_desc <> 'OBJECT_OR_COLUMN'
    AND EP.[name] <> 'microsoft_database_tools_support'))


2 commentaires

Le T. [type] = 'u' semble un peu redondant, car sys.tales sélectionne déjà uniquement des objets de type o.type = 'u' < / code> dans sa définition


Supprimé T. [TYPE] = 'U'



4
votes

Vous pouvez utiliser is_ms_shipped code> pour cela. J'espère que le script ci-dessous est ce que vous recherchez

SELECT 
    S.[name] AS Owner, 
    T.[name] AS TableName 
FROM  
    sys.tables AS T JOIN sys.schemas AS S 
    ON S.schema_id = T.schema_id
WHERE 
    T.is_ms_shipped = 0 
    AND T.[name] <> 'sysdiagrams'


4 commentaires

Bienvenue sur Stackoverflow: Si vous postez du code, des échantillons XML ou des données, Veuillez mettre en surbrillance ces lignes dans l'éditeur de texte et cliquez sur le bouton "CODE SAMPLES" ( {} ) sur La barre d'outils de l'éditeur au format joliment et la syntaxe met en surbrillance!


Bien sûr Marc_s. Merci de me laisser savoir sur le bouton "Samples de code".


Malheureusement, cela ne pas excluez le tableau sysdiagrams car ce tableau n'a pas le is_ms_shipped drapeau .....


J'ai édité ma réponse pour ignorer les sysdiagrammes explicitement. Merci.