# Microsoft SQL Server/Introduction

* 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 ]

## Présentation

Microsoft SQL Server (alias MSSQL) est un système de gestion de base de données (SGBD) développé par la société Microsoft.
Son extension du langage SQL est appelée Transact-SQL (T-SQL).

## Installation du serveur

Ce logiciel initialement disponible que sur le système d'exploitation Microsoft Windows depuis 1989, est installable sur Linux depuis mars 2016, voire sur Mac OS avec la version Docker.
* La version gratuite s'appelle SQL Server Express (anciennement Microsoft SQL Server Desktop Engine (MSDE). Elle permet de créer et manipuler des bases de 2 Go maximum, et de se connecter à d'autres serveurs de base de données existants.
* La version payante nécessite d'acheter soit une licence pour le serveur (à partir de 900 €) plus une par ordinateur client (autour de 15 €), soit une licence par processeur à partir de 4 000 €. Elle permet d'utiliser des bases jusqu'à 16 To avec des tables à 30 000 colonnes.
    Remarque : il existe aussi une édition compacte encore plus limitée (ex : aucune option de sécurité).

### Pour PC

SQL Server se lance ensuite automatiquement à chaque démarrage de la machine, ce qui la ralentit significativement.
Pour éviter cela, exécuter services.msc, puis passer le service MSSQL$SQLEXPRESS en démarrage manuel. Ensuite pour lancer le service à souhait (en tant qu'administrateur), créer un script SQL_Server.cmd contenant la ligne suivante :

### PHP

On distingue plusieurs pilotes PHP pour MS-SQL Server :
* mssql (désuet en PHP7).
* sqlsrv
* PDO
** pdo_sqlsrv
** pdo_dblib (Sybase)
** pdo_odbc (ODBC).

### Windows

Pour se connecter au serveur MS-SQL à partir d'un tout-en-un comme EasyPHP, il suffit de télécharger les pilotes .dll correspondant à sa version de PHP, puis d'indiquer leurs chemins dans le PHP.ini :
* Sous PHP 4, copier le fichier php_mssql.dll dans les extensions.
* Pour PHP 5.4 :
** Télécharger les .dll SQL30
** Les copier dans C:\PROGRA~2\EasyPHP\binaries\php\php_runningversion\ext
** Les ajouter dans C:\PROGRA~2\EasyPHP\binaries\php\php_runningversion\php.ini via les lignes suivantes :
    extension=php_sqlsrv_54_ts.dll
    extension=php_pdo_sqlsrv_54_ts.dll
* Dans PHP 5.5 on obtient toujours Fatal error: Call to undefined function sqlsrv_connect, donc upgrader ou downgrader PHP.
* Dans PHP 7 : cela fonctionne.
Pour vérifier l'installation, redémarrer le serveur Web, puis vérifier que la ligne pdo_sqlsrv s’est bien ajoutée dans la configuration (ex : http://127.0.0.1/home/index.php?page=php-page&display=extensions).

### Linux

Pour se connecter au serveur MS-SQL, il suffit de télécharger les pilotes .so correspondant à sa version de PHP, puis d'indiquer leurs chemins dans le PHP.ini :
Pour vérifier l'installation, redémarrer le serveur Web, puis vérifier que la ligne pdo_sqlsrv s’est bien ajoutée dans la configuration (ex : php -r "phpinfo;" |grep sql).
Sinon, voir Internet Information Services.

### ODBC

En lançant %windir%\system32\odbcad32.exe il est possible de configurer une liaison vers le serveur MS-SQL dans l'onglet "Source de données système".

## Hiérarchie des objets

Chaque serveur en SQL Server peut contenir plusieurs types d'objets, dont voici la hiérarchie :
* Connexion (LOGIN) : plusieurs comptes utilisateurs peuvent utiliser la même connexion au serveur.
* Base de données (DATABASE).
** Rôle (ROLE).
** Utilisateur (USER).
** Schéma (SCHEMA).
*** Table (table).
*** Vue (view).
*** Fonction (FUNCTION).
*** Procédure stockée (PROCEDURE).
* Point de terminaison (ENDPOINT) : élément permettant de communiquer avec le serveur, précisant par exemple le protocole et l'adresse. Visibles avec select * from sys.endpoints.

## L'interface SQL Server Management Studio

La version 2016 de Server Management Studio (SSMS) peut se télécharger en même temps que le logiciel SGBD, ou individuellement sur https://msdn.microsoft.com/fr-fr/library/mt238290.aspx.
Lancer depuis le menu démarrer le programme SQL Server Management Studio.
Le logiciel a ensuite besoin de se connecter au serveur de base de données (ex : localhost), avec mot de passe.

### Navigation

Le logiciel permet de créer et faire dérouler tous les éléments de chaque base grâce à son explorateur d'objet sur la gauche :
* Base1
** Tables
** Procédures stockées
* Base2
Copier une base de données remplace le propriétaire de l'originale par AUTORITE NT / SYSTEM. Il faut ensuite lancer une commande ALTER AUTHORIZATION pour rétablir l'initial.
Ses fonctions de recherche sont limitées à l'option "filtrer" (icône d'entonnoir). On peut lancer un rechercher/remplacer dans les onglets ouverts, mais pour rechercher une table dans plusieurs bases ou une chaine de caractères dans plusieurs tables ou procédures stockées, il faut donc entrer une requête SQL (voir chapitres suivants).
Le menu "Travaux" situé sous les bases permet de programmer des tâches planifiées (ex : troncature de logs ou de tables).
Selon l'emplacement courant, certaines barres d'outils s'affichent ou se masquent automatiquement.

### Schémas de données

On distingue deux types d'objets appelés "schémas" : les schémas de base de données et les schémas de sécurité qui seront abordés dans le chapitre sur la gestion des utilisateurs.
Chaque base de données peut contenir plusieurs schémas de base de donnée : les diagrammes de classes. En effet, SSMS permet d'y afficher les tables existantes avec leurs champs, et d'y ajouter des index et des relations.
Pour créer une liaison entre deux tables, faire un clic droit sur l'une, puis "Relations". Dans la fenêtre apparue, cliquer sur "Ajouter". Une relations temporaire apparait alors et il convient de la modifier :
* Cliquer sur les points de suspension de la ligne "Spécification de tables et colonnes", pour sélectionner les clés à relier.
* Si le lien est simplement créé pour les besoins du dessins, passer le champ "Appliquer la contrainte de clé étrangère" à "Non".

### Critiques

Par ailleurs, cette interface a été critiquée car contrairement à phpMyAdmin par exemple, elle ne permet ni de copier des bases ou des tables, ni d'insérer des lignes dans des tables de plus de 200 lignes, ni de rechercher des champs ou des valeurs (le code pour rechercher est publié dans les chapitres suivants).

## Références

* ↑ https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-ubuntu
* ↑ https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker
* ↑ http://technet.microsoft.com/fr-fr/library/bb967613.aspx
* ↑ http://blogs.developpeur.org/christian/archive/2011/09/12/Prix-sql-server-en-france-pour-SQL-Server-2008-R2.aspx
* ↑ http://technet.microsoft.com/fr-fr/library/ms143432.aspx
* ↑ http://www.microsoft.com/en-us/download/details.aspx?id=20098
* ↑ http://www.php.net/manual/fr/ref.pdo-sqlsrv.php
* ↑ https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server
* ↑ https://www.barryodonovan.com/2016/10/31/linux-ubuntu-16-04-php-and-ms-sql
* ↑ http://www.exacthelp.com/2014/12/understanding-sql-server-security.html
* ↑ https://msdn.microsoft.com/fr-fr/library/ms187359%28v=SQL.120%29.aspx
* ↑ https://msdn.microsoft.com/fr-fr/library/ms189049%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396

## Voir aussi

* (en) « Vidéo officielle d'installation de SQL 2008 » (sous-titrée)
* (en) « Installing WordPress on SQL Server »