# Microsoft SQL Server/Tables

* Introduction
* Bases de données
* Gestion des utilisateurs
* Variables
* Tables
* Procédures stockées
* Fonctions
* Bases de données spatiales
* Performances
* Importer et exporter
* SugarCRM

## Annexes

* Mots réservés
* Problèmes connus
* Introduction
* Bases de données
* Gestion des utilisateurs
* Variables
* Tables
* Procédures stockées
* Fonctions
* Bases de données spatiales
* Performances
* Importer et exporter
* SugarCRM

## Annexes

* Mots réservés
* Problèmes connus
[ Modifier le sommaire ]

## Introduction

Les langages de définition et de manipulation de données (LDD et LMD) respectent la norme SQL-86. Toutefois, en plus des requêtes SELECT, UPDATE, INSERT on trouve MERGE depuis la version 2008.

## Créer une table

Dans SSMS, un clic droit sur le dossier "Tables" d'une base permet d'en ajouter.
Sinon en SQL il faut taper :
Un clic droit sur une table existante permet au choix de :
* Modifier sa structure (ajouter une colonne, modifier un type).
* Sélectionner ses 1 000 premiers enregistrements.
* Éditer ses 200 premiers.
Pour sélectionner d'autre fractions de la table, utiliser TOP :

### Collation

On peut préciser la collation des champs avec le mot COLLATE. Par exemple pour que le "é" soit classé entre le "e" et le "f" (et pas après le "z") :

## Remplir une table

Remplissage des premières colonnes :
Pour certaines colonnes ciblées il faut préciser les champs. Par exemple en ne remplissant que le prénom, le nom de famille sera nul :
Depuis une autre table :
Mise à jour :

### Créer un index

L'abréviation PK du logiciel signifie "primary key" (clé primaire).
Pour créer une clé étrangère, dérouler la table, dans le menu Clés, clic droit, nouvelle clé étrangère..., la liste de toutes les clés étrangères de la table apparait dans une petite fenêtre (baptisées par défaut "FK_..." pour "foreign key" : clé étrangère).
Dans Général, Spécification de tables et colonnes, cliquer sur "..." pour sélectionner la table et son champ à lier.
Si ensuite l'erreur suivante survient :
    Les colonnes de la table ne correspondent pas à une clé primaire existante ou à une contrainte UNIQUE
Il faut définir une contrainte d'unicité sur les valeurs du champ. Ainsi toutes ses valeurs seront différentes (sauf les null) et l'utilisateur sera averti d'une erreur s'il tente d'insérer un doublon.

### Ajouter un identifiant unique

Normalement chaque table doit posséder au moins un identifiant unique (clé primaire). Or, il est impossible de modifier une colonne existante pour lui attribuer la propriété AUTOINCREMENT nécessaire à une telle clé.
Il faut donc en ajouter une :

## Copier une table

La sélection ci-dessous clone une table avec les mêmes tailles de champs :
Sachant que la table spt_values de la base système master fournit déjà des numéros séquentiels via son champ number, il devient possible de générer des tables préremplies avec le compteur :
D'où :

## Importer une table

Soit un tableau (Excel ou Calc) converti par exemple en CSV encodé en PC DOS, pour l'importer en tant que nouvelle table :
Si la table possède un ID en autoincrémentation, le contenu du CSV s'ajoutera à la suite. Pour éviter cela, utiliser DBCC CHECKIDENT.

## Supprimer une table

Pour supprimer toute la table (données et structure) :
Pour tronquer une table, c'est-à-dire ne conserver que les en-têtes et types des colonnes, en retirant tous les enregistrements :
Pour supprimer certaines lignes d'une table :

## Rechercher une table

Pour rechercher une table dont on connait le nom exact, dans toutes les bases de données du serveur :

## Rechercher dans toutes les tables

SSMS 10 ne propose pas de fonction de recherche de table, champ ou valeur, comme on en trouve dans phpMyAdmin pour MySQL par exemple.

### Recherche d'une table

Ce script parcourt chaque base de données pour y récupérer les tables dont les noms contiennent une chaine de caractères spécifiée (à la fin).

### Recherche d'une valeur

La recherche d'une valeur de champ dans toutes les tables prend un certain temps :
Pour rechercher dans toutes les vues, remplacer tbl.xtype = 'U' par tbl.xtype = 'V'.

## Créer une vue

Pour créer une vue :
Dans ce cas, la différence de temps d'affichage est très significative :

## Retrouver la requête générant une vue

Dans l'interface graphique, clic droit dessus, Générer un script de la vue en tant que, CREATE TO.
En lignes de commande :

## Jointures

* inner join : jointure interne
* left join : jointure à gauche
* right join : jointure à droite
* full outer join : jointure externe
* apply : intra-jointure
** cross apply
** outer apply

## Références

* ↑ https://msdn.microsoft.com/fr-fr/library/bb510625%28v=sql.120%29.aspx
* ↑ https://msdn.microsoft.com/en-us/library/ms174979.aspx
* ↑ https://msdn.microsoft.com/fr-fr/library/ms190920.aspx
* ↑ https://msdn.microsoft.com/en-us/library/ms174335.aspx
* ↑ http://office.microsoft.com/fr-fr/help/les-colonnes-de-la-table-0s-ne-correspondent-pas-a-une-cle-primaire-existante-ou-a-une-contrainte-unique-HP003083867.aspx
* ↑ http://msdn.microsoft.com/fr-fr/library/ms188365.aspx
* ↑ https://msdn.microsoft.com/fr-fr/library/ms176057%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396
* ↑ http://stackoverflow.com/questions/591853/search-for-a-string-in-an-all-the-tables-rows-and-columns-of-a-db
* ↑ https://docs.microsoft.com/fr-fr/sql/relational-databases/system-compatibility-views/sys-sysobjects-transact-sql?view=sql-server-2017
* ↑ https://technet.microsoft.com/en-us/library/dd171921%28v=sql.100%29.aspx
* ↑ https://technet.microsoft.com/fr-fr/library/ms175156%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396