# Microsoft SQL Server

Microsoft SQL Server és un sistema de gestió de bases de dades relacional (SGBDR) produït per Microsoft. Està basat en el llenguatge de consulta Transact-SQL, una implementació de l'estàndard ANSI/ISO SQL (Structured Query Language), capaç de posar a disposició de molts usuaris grans quantitats de dades de manera simultània.

## Característiques

Entre les seves característiques tenim:
* Suport de transaccions.
* Escalabilitat, estabilitat i seguretat integrades en Directori Actiu.
* Suport per procediments emmagatzemats.
* Inclou també un potent entorn gràfic d'administració, que permet l'ús comandaments DDL i DML de manera gràfica.
* Permet treballar en mode client-servidor on la informació i dades viuen en el mateix servidor i els terminals o clients de la xarxa només accedeixen a la informació.
* A més a més, permet administrar informació d'altres servidors de dades.
Aquest sistema inclou una versió reduïda, anomenada MSDE amb el mateix motor de base de dades però orientat a projectes més petits, que en llur versió 2005 passa a ser el que s'anomena com SQL Express Edition.
Microsoft SQL Server constitueix l'alternativa de Microsoft a altres potents sistemes gestors de bases de dades com són Oracle, Sybase ASE, PostgreSQL o MySQL.
És comuna la pràctica de desenvolupar grans projectes complementant Microsoft SQL Server i Microsoft Access mitjançant els anomenats ADP (Access Data Project). D'aquesta manera es completa una potent base de dades (Microsoft SQL Server) amb un entorn de desenvolupament còmode i d'alt rendiment (VBA Access) via la implementació d'aplicacions de dues capes i l'ús de formularis Windows.
És pràctica comuna desenvolupar grans projectes complementant Microsoft SQL Server i Microsoft Access mitjançant els anomenats ODBC i OLEDB. D'aquesta manera es completa una potent base de dades (Microsoft SQL Server) amb un entorn de desenvolupament còmode i d'alt rendiment (VBA Access) via a implementació d'aplicacions de dues capes i l'ús de formularis Windows.
Per el desenvolupament d'aplicacions més complexes, més de dues capes, Microsoft SQL Server inclou interfícies d'accés per diverses plataformes de desenvolupament, entre elles, .NET.
Microsoft SQL Server, a diferència de la seva més propera competència, no és multiplataforma, donat que només pot córrer en sistemes operatius propis de Microsoft.

## Versions

Història de versions :
| Versió | Any | Nom de la versió | Nom clau |
| 1.0 (US/2) | 1989 | SQL Server 1-0 | SQL |
| 4.21 (WinNT) | 1993 | SQL Server 4.21 | SEQUEL |
| 6.0 | 1995 | SQL Server 6.0 | SQL95 |
| 6.5 | 1996 | SQL Server 6.5 | Hydra |
| 7.0 | 1998 | SQL Server 7.0 | Sphinx |
| - | 1999 | SQL Server 7.0 OLAP Tools | Plat |
| 8.0 | 2000 | SQL Server 2000 | Shiloh |
| 8.0 | 2003 | SQL Server 2000 64-bit Edition | Liberty |
| 9.0 | 2005 | SQL Server 2005 | Yukon |
| 10.0 | 2008 | SQL Server 2008 | Katmai |
| 10.25 | 2010 | SQL Azure DB | CloudDatabase |
| 10.50 | 2010 | SQL Server 2008 R2 | Kilimanjaro |
| 11.0 | 2012 | SQL Server 2012 | Denali |
| 12.0 | 2015 | SQL Server 2014 | SQL14 (abans Hekaton) |
| 13.0 | 2016 | SQL Server 2016 | |
| 14.0 | 2017 | SQL Server 2017 | vNext 2017 |
El codi font original de SQL Server que va ser utilitzat en les versions prèvies a la versió 7.0 hauria estat comprat de Sybase, però va ser actualitzat en les versions 7.0 i 2000, i reescrit en la versió 2005. Generalment, cada 2-3 anys, una nova versió és llançada i, entre aquests llançaments, es proposen service packs amb millores i correccions de bugs, i hotfixs per problemes urgents en el sistema de seguretat o bugs crítics.

## Programació
### T-SQL

T-SQL (Transact-SQL) és el principal mitjà d'interacció amb el Servidor, el qual permet realitzar les operacions claus en SQL Server, incloent la creació i modificació d'esquemes de base de dades, inserció i modificació de dades en la base de dades, així com l'administració del servidor com a tal. Això es realitza mitjançant l'enviament de sentències en T-SQL i declaracions que són processades pel servidor i els resultats (o errors) tornen a l'aplicació client.

### Client Natiu de SQL

Client Natiu de SQL, és la biblioteca d'accés a dades per als clients de Microsoft SQL Server versió 2005 d'ara endavant. Implementa de forma nativa suport per a les característiques de SQL Server, incloent l'execució de la seqüència de dades tabular, suport per a bases de dades en mirall de SQL Server, suport complet per a tots els tipus de dades compatibles amb SQL Server, conjunts d'operacions asíncrones, les notificacions de consulta, suport per xifrat, així com rebre diversos conjunts de resultats en una sola sessió de base de dades. Client Natiu de SQL s'utilitza com a extensió de SQL Server plug-ins per a altres tecnologies d'accés de dades, incloent ADO o OLE DB. Client Natiu de SQL pot també usar-se directament, passant per alt les capes d'accés de dades.

## Edicions i serveis

Cada versió de SQL Server posseeix diferents versions amb diferents preus (per a cada versió) que depenen també en la configuració física del servidor.
A continuació es presenten les versions principals:

### Enterprise

Inclou totes les característiques (deshabilitades en altres edicions).És el tipus de versió amb més privilegis existent al mercat.

### Developer

Una edició amb les mateixes característiques que l'Enterprise, amb la finalitat de ser instal·lada solament en ambient de desenvolupament i no en producció. Si es desenvolupa per a una edició Standard cal tenir en compte les característiques deshabilitades per a aquesta versió.

### Standard

Una versió limitada segons la configuració del servidor i les seves característiques, dissenyada per a servidors inferiors.
Per exemple: en la versió 2012, l'edició Enterprise suporta un nombre il·limitat de processadors, i l'agregació de memòria i CPUs en calent sense la interrupció del servei o del servidor; mentre l'edició Standard aquesta limitada a 16 processadors i no suporta la "agregació en calenta".

### Express

Una versió gratuïta que possibilita la creació de bases de dades limitades amb característiques bàsiques, amb la finalitat de recolzar aplicacions que necessitin una solució simple per a emmagatzematge d'una quantitat limitada de dades, o usuaris que els seus recursos i necessitats són limitats.
En la versió 2012, aquesta edició pot utilitzar un màxim de 1 GB de memòria, i emmagatzemar no més de 10GB, funciona en servidors amb un nombre màxim de quatre processadors. Aquestes limitacions es mantenen en la versió 2014 (4 cores, 1GB ram, i 10Gb per base de dades).

### SQL Azure

És una versió de SQL Server en el núvol, que permet pagar mensualment pel servei sense la necessitat de mantenir un servidor físic (On Premise). L'empresa paga solament pel servei, i el servei és manejat a través de torres de servidors en diferents llocs al món.
Amb SQL Azure no és necessari instal·lar, mantenir o actualitzar un servidor físic; a pesar que aquest servei depèn d'aspectes relacionats a problemes de seguretat pel que fa a la seva presència fora de l'empresa i a la disponibilitat de connexió a Internet.
Durant un temps, el servei va ser ampliat amb l'opció de crear un servidor virtual per la xarxa, i instal·lar SQL Server tant com un dels serveis competidors, i manejar el servidor virtual com si fos un servidor físic local (encara que físicament no està accessible); i es pot diferenciar entre l'opció original que aquesta denominada PAAS (Platform as a Service: El Plataforma com un Servei) i la nova opció dels servidors virtuals denominada IAAS (Infrastructure as a Service, Infraestructura com un Servei).
Aquest servei aquesta atorgat per Microsoft des de 2009 i s'uneix a serveis similars de empreses de third-party.

## Interfície d'usuari

SQL Server proporciona uns interfície que han canviat durant els anys, dels quals els més coneguts són els interfície gràfics que estan utilitzats com a eina de desenvolupament estàndard als desenvolupadors i administradors.
La interfície gràfica fins a 2005 va incloure l'Enterprise Manager amb una vista d'arbre dels diferents objectes i amb la capacitat de manejar-los; i el Query analyzer com a interfície textual per executar comandos de TSQL.
En la versió 2005 les dues eines es van unificar a una –el SQL Server Management Studio (SSMS), i a partir de 2008 va ser inclosa l'opció de treballar amb el Visual Studio– la interfície estàndard de desenvolupament de Microsoft (als diferents llenguatges, BI, etc.). Un altre interfície opcional és la utilització de Línia de comandos, amb eines com SQLCmd, ISQL, OSQL que possibilita l'execució de scripts i processament per lots. Des de 2008 es pot desenvolupar amb SQLCmd (SQL Command) a través del SSMS sense interconnectar-se a l'interfície textual de Windows. Una altra opció en l'àmbit de scripts és la utilització del llenguatge de scripts Powershell de Microsoft.
A part dels intefaces estàndards de SQL Server, es pot executar comandos de TSQL amb eines de connexió com ODBC i OLE-DB.

## Serveis

A contrari de sistemes de bases de dades com Microsoft Access que són "passives" i contenen un arxiu a qual cal connectar i l'execució dels comandos es duu a terme en el client (la computadora d'usuari), en SQL Server hi ha nombre de serveis, programari que estan executades en la memòria del servidor per part del sistema i, per tant, aprofiten les capacitats del servidor que és més potent que els clients, prevenen congestió en la xarxa, i poden programar tasques que corrin encara que el client no està connectat.
Els serveis principals:
* SQL Server - El "motor" del sistema
* SQL Agent - Execució de tasques (Jobs, scripts programats) i va enviar d'advertiments en cas de càrrega pesada i irregulars en el sistema
* Full-Text Filter Daemon Launcher - La utilització en els indexis especials del "Full text search" per recerca textual avançada
* SQL Browser - El "oïdor" dedicat a comandos enviats i redirigir-los a la seva destinació
* SSIS Server - L'operació del SSIS (l'eina de ETL)
* SSAS Server - L'operació del SSAS (l'eina de OLAP)
* SSRS Server - L'operació del SSRS (l'eina d'informes)

## Capacitats i eines bàsiques
### Bases de dades

En cada instal·lació de SQL Server hi ha 4 bases de dades de sistema, i la capacitat de crear noves bases de dades per l'usuari, en els quals les dades estan emmagatzemades en taules.
Aquestes bases de dades, creades per part dels usuaris, inclouen bàsicament un arxiu de dades (amb el sufix mdf) amb les taules i els diferents objectes a nivell de la base de dades; i un arxiu de registre (amb el sufix ldf) amb les transaccions obertes, i transaccions tancades, Subjecte al model de recuperació seleccionat (es pot acumular en l'arxiu de registre tots els canvis en la base de dades des de l'últim respatller). Es pot crear un conjunt d'arxius de dades a més del principal (amb el sufix ndf) per consideracions d'eficiència, partició de càrrega de treball entre els discos rígids, etc.
Les bases de dades del sistema:
* master - Tots els procediments, funcions i taules del sistema que estan utilitzades per part de totes les bases de dades i que estan instal·lades automàticament, tant com les que han estat creat per part dels administradors del sistema. A més, totes les definicions en respecte a la seguretat a nivell del servidor, estan emmagatzemades en aquesta base de dades.
* msdb - Emmagatzematge de les tasques de l'agent, els codis de CLR combinats en el sistema, els paquets de SSIS, i uns altres més.
* model - El motlle de les bases de dades. Cada nova base de dades es crea com una còpia d'aquesta base de dades, menys que una mica més estava definit explícitament.
* tempdb - Base de dades temporal que es crea de nou cada vegada que el servei reinicia. S'utilitza per emmagatzemar taules temporals creades per part dels usuaris o el sistema (per exemple en ordenacions complexos).

### Taules fixes i temporals

Des de la perspectiva lògica, les dades emmagatzemades en les bases de dades en taules, que mitjançant elles s'implementa la teoria de les bases de dades relacionals. La taula es divideix en files i columnes (De vegades se'ls coneix com a registres i camps). Les taules poden ser fixes o temporals, mentre que en el segon cas existeixen físicament en la base de dades tempdb, i s'esborren automàticament en cas de desconnexió de la sessió o de la connexió al servidor, depèn en el tipus de la taula temporal.
Des de la perspectiva física, el sistema divideix els arxius de la basi dades en Extents de 64 KB, i cadascú a vuit pàgines de 8 KB. Generalment, cada Extent s'assigna a una taula o un índex, menys les taules petites; i cada pàgina s'assigna sempre a una taula específica. El sistema és responsable de l'augment dels arxius, d'acord amb els ajustos de l'usuari, i d'assignar Extents i pàgines a les taules.
A les taules es pot crear índexs. Els índexs s'emmagatzemen al costat de la taula (Senar Clustered Index) o són la taula en si (Clustered Index). Els índexs assisteixen en la recerca de dades en les taules (com els fitxers en les llibreries), a ordenar-les, i la definició de claus primàries.
Entre les taules es pot crear una relació d'un a molts.
A part de les taules dels usuaris, hi ha taules que emmagatzemen meta data: dades sobre el sistema mateix, els diferents objectes, els drets, estadístiques sobre el rendiment del sistema (DMV), etc.

### Tipus de dades

Per a cada columna en una taula i a cada variable o paràmetre, es defineix un tipus de dades que siguin emmagatzemats en ell, entre ells:
* Numeros: Nombres enters i no sencers en diferents grandàries, i en diferents nivells de precisió; i acte incremento opcional.
* Textos: Cadenes de diferents longituds, i diferents capacitats de recolzar diferents llengües.
* Dates: Dates en diferents nivells de precisió, des de dies complets fins a fraccions menors d'un segon, que recolzen dates a partir del principi del segle 20 o del calendari gregorià, i la capacitat de diferenciar entre diferents usos d'horaris.
* XML: Dades textuals (cadenes) que representen conjunts estàndards de dades (estàndard SGML).
* Dades binàries: Dades emmagatzemades com a dades binàries (bits i bytes), que possibiliten l'emmagatzematge d'arxius gràfics, etc.
* Geography: Representació estàndard d'informació geogràfica, tals com a estats, zones geogràfiques, localitats; i les càlculs com a distàncies.
* Geometry: Representació estàndard de puntes, línies, superfícies en el plànol; i les relacions entre elles.
* Hierarchid: Representació estàndard de informació jeràrquica com a llista de materials, relacions de subordinació entre empleats, etc.

### Vistes

Les vistes representen generalment comandos d'extracció de dades, que s'emmagatzemen sense les dades (que estan emmagatzemats en les taules). Aquesta opció ens possibilita crear extraccions complexes o estàndards, emmagatzemar-les com a vistes, i utilitzar les vistes sense la necessitat d'escriure de nou els comandos o mantenir els codis on elles apareixen. Addicionalment, és un mitjà molt important per atorgar drets selectius de lectura (en cas que volem possibilitar a un usuari contemplar parcialment les columnes o les files d'una taula).
Una vista es pot considerar una taula virtual o una consulta emmagatzemada. Les dades accessibles a través d'una vista no estan emmagatzemats en un objecte diferent de la base de dades. El que està emmagatzemat en la base de dades és una instrucció SELECT. El resultat de la instrucció SELECT forma la taula virtual que la vista retorna. L'usuari pot utilitzar aquesta taula virtual fent referència al nom de la vista en instruccions Transact-SQL, de la mateixa forma en què es fa referència a les taules. Les vistes s'utilitzen per alguna d'aquestes funcions, o per a totes:
? Restringir l'accés de l'usuari a files concretes d'una taula. Per exemple, permetre que un empleat només vegi les files que guarden el seu treball en una taula de seguiment d'activitat laboral.
? Restringir l'accés de l'usuari a columnes específiques. Per exemple, permetre que els empleats que no treballin en el departament de nòmines vegin les columnes de nom, oficina, telèfon i departament de la taula d'empleats, però no permetre que vegin les columnes amb les dades de salari o una altra informació personal.
? Combinar columnes de diverses taules de manera que semblin una sola taula.
? Agregar informació en lloc de presentar els detalls. Per exemple, presentar la suma d'una columna o el valor màxim o mínim d'una columna.
Les vistes es creen definint la instrucció SELECT que recupera les dades presentades per la vista. Les taules de dades a les quals fa referència la instrucció SELECT es coneixen com les taules basi per a la vista. Les vistes en totes les versions de SQL Server són actualitzables (poden ser objectiu d'instruccions UPDATE, DELETE o INSERT) mentre la modificació afecti només a una de les taules basi de la vista.

### Procediments emmagatzemats

Els procediments són scripts de comandes de TSQL, que poden ser executats amb diferents paràmetres. Per exemple, procediment que obté nombre d'any com a paràmetre, i actualitza una taula de resum de vendes, amb les vendes dels agents en l'aquest any, basada en la taula de registre de vendes.
Els procediments emmagatzemats poden facilitar en gran manera l'administració de la base de dades i la visualització d'informació sobre aquesta base de dades i els seus usuaris. Els procediments emmagatzemats són una col·lecció precompilada d'instruccions SQL i instruccions de control de flux opcionals emmagatzemades sota un sol nom i processades com una unitat. Els procediments emmagatzemats es guarden en una base de dades; es poden executar des d'una aplicació i permeten variables declarades per l'usuari, execució condicional i altres funcions eficaces de programació. Els procediments emmagatzemats poden contenir flux de programes, lògica i consultes a la base de dades. Poden acceptar paràmetres, proporcionar resultats de paràmetres, retornar conjunts de resultats individuals o múltiples i retornar valors.
Els avantatges d'utilitzar procediments emmagatzemats en SQL Server en comptes de programes Transact-SQL emmagatzemats localment en equips clients consisteixen que:
* Permeten una programació modular. Pot crear el procediment una vegada, emmagatzemar-ho en la base de dades, i cridar-ho des del programa el nombre de vegades que desitgi. Un especialista en programació de bases de dades pot crear procediments emmagatzemats, que després serà possible modificar independentment del codi font del programa. Faciliten el manteniment.
* Permeten una execució més ràpida. En situacions en les quals es necessita una gran quantitat de codi Transact-SQL, o si les operacions es realitzen diverses vegades, els procediments emmagatzemats poden ser més ràpids que els lots de codi Transact-SQL. Els procediments són analitzats i optimitzats al moment de la seva creació, i és possible utilitzar una versió del procediment que es troba en la memòria després que s'executi per primera vegada. Les instruccions de Transact-SQL que s'envien diverses vegades des del client cada vegada que han d'executar-se han de ser compilades i optimitzades sempre que SQL Server les executa.
* Poden reduir el tràfic de xarxa. Una operació que necessiti centenars de línies de codi Transact-SQL pot realitzar-se mitjançant una sola instrucció que executi el codi en un procediment, en comptes d'enviar centenars de línies de codi per la xarxa.
* Poden utilitzar-se com a mecanisme de seguretat.
És possible concedir permisos als usuaris per executar un procediment emmagatzemat, fins i tot si no compten amb permís per executar directament les instruccions del procediment.

### Funcions definides per l'usuari

Les funcions són un objecte que combina algunes capacitats de les vistes, amb altres dels procediments. Com les vistes, poden extreure dades i executar càlculs, i retornen un resultat a l'usuari o al programa que els va executar. Tant com els procediments, inclouen codis de TSQL, i poden ser executats amb paràmetres.
Les funcions retornen un valor o un conjunt de valors.
Les funcions definides per l'usuari es creen amb la instrucció CREATE FUNCTION, es modifiquen amb la instrucció ALTER FUNCTION i es lleven amb la instrucció DROP FUNCTION. Tots els noms de funcions complets (database_name.owner_name.function_name) definits per l'usuari han de ser únics. Per crear, modificar o llevar funcions definides per l'usuari, ha de tenir permisos de CREATE FUNCTION. Els usuaris diferents del propietari han de tenir permís EXECUTE per a una funció, i solament així podran utilitzar-la en una instrucció de Transact-SQL. Per crear o modificar taules amb referències a funcions definides per l'usuari en la restricció CHECK, la clàusula DEFAULT o la definició d'una columna calculada, també ha de tenir permís REFERENCES per a les funcions. Els errors de Transact-SQL que produeixen la cancel·lació d'una instrucció i continuen amb la següent instrucció del mòdul, com desencadenadores o procediments emmagatzemats, es tracten de forma diferent dins d'una funció. En les funcions, aquests errors fan que es detingui l'execució de la funció. Això fa que es cancel·li la funció que va invocar la instrucció. Una funció definida per l'usuari no té cap o té diversos paràmetres d'entrada i retorna un valor escalar o una taula. Una funció pot tenir un màxim de 1024 paràmetres d'entrada. Quan un paràmetre de la funció pren un valor predeterminat, ha d'especificar-se la paraula clau DEFAULT en cridar a la funció per poder obtenir el valor predeterminat. Aquest comportament és diferent del dels paràmetres amb valors predeterminats dels procediments emmagatzemats, pels quals ometre el paràmetre implica especificar el valor predeterminat. Les funcions definides per l'usuari no admeten paràmetres de sortida.

### Consultes Distribuïdes

Les consultes distribuïdes tenen accés a dades de diversos orígens, que poden estar emmagatzemats en un equip o en equips diferents. Microsoft SQL Server 2000 admet les consultes distribuïdes a través d'OLE DB Les consultes distribuïdes proporcionen als usuaris de SQL Server accés a:
* Dades distribuïdes emmagatzemades en múltiples instàncies SQL Server.
* Dades heterogènies emmagatzemades en diversos orígens de dades relacionals i no relacionals als quals es té accés mitjançant un proveïdor OLE DB.
Els proveïdors OLE DB exposen dades en objectes tabulars anomenats conjunts de files. En les instruccions Transact-SQL, SQL Server 2000 permet que es faci referència als conjunts de files dels proveïdors OLE DB com si anessin una taula de SQL Server. En les instruccions SELECT, INSERT, UPDATE i DELETE de Transact-SQL, es pot fer referència directa a les taules i vistes d'orígens de dades externes. ja que les consultes distribuïdes usen OLE DB com a interfície subjacent, aquestes tenen accés als sistemes DBMS relacionals tradicionals amb processadors de consultes SQL, així com a les dades administrades per orígens de dades de capacitat i sofisticació diverses. Sempre que el programari propietari de les dades els exposa en un conjunt de files tabular a través del proveïdor OLE DB, les dades es podran usar en les consultes distribuïdes.
Nota: L'ús de les consultes distribuïdes en SQL Server és similar a la funcionalitat de les taules vinculades mitjançant ODBC, que anteriorment admetia Microsoft Access. Aquesta funcionalitat es troba ara integrada en SQL Server amb OLE DB com a interfície per a les dades externes.

### Transaccions

Una transacció és un conjunt de comandos, que s'està executat completament o no executat en absolut: tot o gens. Per exemple, si una suma de diners va ser traslladada d'un compte bancari a una altra, i cal actualitzar ambdues comptes sobre el dipòsit i la retirada; és obligatori que ambdues comptes s'actualitzen juntes, o cap (en cas que una de les actualitzacions falla); per evitar conseqüències inconsistents d'un dipòsit sense cap retirada, o viceversa. Per tant, una transacció és una seqüència d'operacions realitzades com una sola unitat lògica de treball. Una unitat lògica de treball ha d'exhibir quatre propietats, conegudes com a propietats ACID (atomicitat, coherència, aïllament i durabilitat), per ser qualificada com a transacció:
* Atomicitat
Una transacció ha de ser una unitat atòmica de treball, tant si es realitzen totes les seves modificacions en les dades, com si no es realitza cap d'elles.
* Coherència
Quan finalitza, una transacció ha de deixar totes les dades en un estat coherent. En una base de dades relacional, s'han d'aplicar totes les regles a les modificacions de la transacció per mantenir la integritat de totes les dades. Totes les estructures internes de dades, com a índexs d'arbre B o llistes doblement vinculades, han d'estar correctes al final de la transacció.
* Aïllament
Les modificacions realitzades per transaccions simultànies s'han d'aïllar de les modificacions dutes a terme per altres transaccions simultànies. Una transacció veu les dades en l'estat en què estaven abans que una altra transacció simultània els modifiqués o després que la segona transacció s'hagi conclòs, però no veu un estat intermedi. Això es coneix com a seriabilitat a causa que el seu resultat és la capacitat de tornar a carregar les dades inicials i reproduir una sèrie de transaccions per finalitzar amb les dades en el mateix estat en què estaven després de realitzar les transaccions originals.
* Durabilitat
Una vegada conclosa una transacció, els seus efectes són permanents en el sistema. Les modificacions persisteixen encara en el cas de produir-se un error del sistema.
SQL Server té una capacitat limitada de niar transaccions.

### L'optimizador

L'optimizador és una part del programari que "pren la decisió" de com cada comando s'executarà, tant que l'execució serà el més eficient, o almenys bastant eficient (és a dir, bastant eficient per evitar seguir buscant una altra solució, que encara que sigui més eficient, el preu de la recerca addicional "costarà" més que l'estalvi de recursos).
SQL és un llenguatge declaratiu, en el qual el desenvolupador declara que vol extreure o actualitzar sense la necessitat d'indicar com (a contrari dels llenguatges imperatius i, per tant, l'optimizador té un paper protagònic, que d'acord amb les estadístiques que el sistema emmagatzema sobre les distribucions de les dades en les taules, els indexis, i regles internes; pren la decisió adequada.

## Privilegis i seguretat de dades

Per connectar-se al SQL Server, es necessita un Login (usuari a nivell del servidor). Quan la política de seguretat es defineix com Windows Authentication i el servidor es combina amb les definicions del Domain, els Logins es defineixen a l'Active Directory. Quan la definició és SQL Server Authentication els logins (usuari i contrasenya) es defineixen en el SQL Server mateix. Conseqüentment, en el primer cas cal identificar-se amb nom i contrasenya solament en connectar-se a la xarxa, i després es connecta automàticament a tots els servidors que són Windows Authentication (amb el Login global); i en el segon cas cal identificar-se en connectar-se a cada servidor de SQL Server Authentication (cada vegada amb un Login local).
A nivell de la base de dades, l'usuari s'identifica com un User que està relacionat generalment al Login (que és a nivell del servidor), i els privilegis a l'User existeixen solament en l'àmbit de la base de dades (a més als privilegis al Login). Per atorgar drets generals pot assistir-se amb llistes de Server Rols (rols a nivell del servidor) o Database Rols (rols a nivell de la base de dades específica), cadascú amb privilegis específics a un rol específic; i cada usuari associat amb un d'aquests Rols obté els privilegis associats amb ell. A més, l'administrador pot atorgar drets especifics, i crear altres Database Rols (no es pot crear Server Rols).
Els privilegis a nivell del servidor inclouen la capacitat de crear bases de dades, utilitzar les tasques (Jobs), crear respatllers de bases de dades i restaurar-los, modificar les definicions del servidor, etc. Els privilegis a nivell de la base de dades possibiliten extreure i actualitzar dades, crear objectes com a procediments i taules, utilitzar aquests objectes, etc. Com a regla general es pot atorgar drets (Grant), revocar privilegis existents (Revoke), i denegar privilegis encara no existeixen (Deny).

## Altres eines de servei

Addicionalment a les seves capacitats elementals com a eina de gestió de bases de dades relacionals (crear taules, definir les relacions entre elles, gestió de transaccions, crear índexs etc, SQL Server recolza una llista que augmenta d'altres eines de servei; a part d'eines de tercers que canvien o que completen el que existeix.

### Respatllers i recuperacions

A part de solucions d'alternatives a nivell del sistema operatiu (respatller dels arxius de la base de dades), hi ha una eina integrada en el SQL Server que possibilita un respatller complet o diferencial, d'acord amb el model de recuperació (Recovery Model) predefinit a la base de dades; i una recuperació completa o a un punt de temps. A part d'un respatller de la base de dades es pot donar-los suport a través d'un guió (amb les dades o sense). A partir de 2008, es pot comprimir els arxius de respatller.

### Compressió

A partir de 2008 es va afegir l'opció de compressió que possibilita comprimir la grandària física de les taules i els índexs, i utilitzar més eficientment el volum dels discos rígids i reduir operacions de IO (el que augmenta la càrrega del CPU). Com ja ha estat esmentat, es pot comprimir també els arxius de respatller.

### Replicació, alta disponibilitat, i recuperació de desastres

Algunes eines possibiliten crear repliques parcials o complets de les bases de dades, millorar la disponibilitat, i recuperar de desastres; a part de l'opció de recolzar i recuperar les bases de dades, una opció que se suposa que és molt lenta.
Les còpies creades per aquestes eines, poden ser utilitzades com un respatller disponible immediatament en cas que el sistema falla, tant com una rèplica en un subsistema, independent del sistema d'origen, per a equilibri de càrrega; i que les actualitzacions s'executin en la base de dades, i les recuperacions per als reportatges s'executin en la rèplica.
Entre aquestes eines es pot esmentar la replicació que possibilita crear una rèplica sincronitzada de la base de dades, el Mirroring que executa en el servidor de mirall cada actualització que s'executa en el servidor d'origen, Log Shipping que possibilita emmagatzemar una còpia sincronitzada a través d'arxius de registre (Log) amb totes les actualitzacions en el servidor d'origen, i les eines d'alta disponibilitat i recuperació de desastres (HADR, des de 2012) que solucionen problemes de Mirroring en relació amb el temps de reacció de les fallades tècniques i la disponibilitat de les còpies en temps de pau.

### L'agent i la programació de tasques

L'agent és el servei encarregat de la programació de tasques, i s'encarrega d'executar-les independentment. Generalment l'executa tasques de manteniment, tasques complexes de ETL, respatllers, etc.

### Manteniment

Amb la finalitat de millorar el rendiment del sistema cal mantenir les estadístiques, utilitzades per l'optimizador, organitzar els arxius físics, etc; i s'utilitzen eines dedicades per a aquests propòsits, que s'executen periòdicament per tasques programades, i d'una manera coordinada amb les tasques d'ETL i de respatller.

### Service Broker

Una tecnologia que va ser agregada en 2005 que implementa arquitectura orientada a serveis, i que possibilita execucions asíncrons: primer que gens per enviar missatges entre diferents aplicacions que s'executen simultàniament, però també per executar procediments asíncronament, en la manera de dispara i oblida - un procediment que s'executa en una sessió diferent de la sessió que ho inicio, i tots dos procediments segueixen executat independentment un de l'altre.

### Enviar Correus Electrònics

SQL Server té la capacitat d'enviar correus electrònics a través del codi. Aquesta funcionalitat s'utilitza generalment per enviar alertes sobre problemes en el sistema (per exemple si l'ús de la CPU va augmentar fins a un llindar predefinit o si el procés ETL va fallar), però també quan el procés va acabar reeixidament.

### Full Text Search (Recerca de Textos complets)

Una eina que possibilita indexar columnes textuals com a textos i no solament com a cadenes; i executar recerques complexes dependents en el sentit del text i en l'idioma. Per exemple, busquem un verb, i volem obtenir totes les ocurrències de les seves conjugacions.

### Rastrejar

Aquestes eines inclouen el Traci que possibilita rastrejar activitats amb la finalitat de mantenir càrregues i fallades, i seguretat de dades (recuperació no permesa de dades), el Profiler que possibilita rastrejar les ordres que s'executen i els esdeveniments que s'ocorren en el servidor, i l'Extended Events que va ser agregat en 2008 i canvia el profiler gràcies a la seva baixa signatura (la consumició de recursos i la influència sobre el rendiment del servidor).
A part d'aquests, es pot utilitzar 2 tipus de Trigers (disparadors) per rastrejar els canvis i les activitats: DML Trigers pre definits sobre les taules i les vistes i que s'inicien per instruccions d'actualització de dades (Select / Update / Delete), i DDL Triggers que s'inicien per canvis en els objectes mateixos (i no en les dades), en el nivell de la base de dades o del servidor.

### Combinació de CLR

A partir de 2005 es pot combinar fàcilment en SQL Server procediments, funcions, i funcions d'agregat desenvolupades en CLR. Cal desenvolupar el codi en una de les eines de desenvolupament de .NET, crear un arxiu DLL, i combinar-ho en el sistema. L'avantatge d'aquesta tecnologia és les seves capacitats en problemes que no són exclusivament de bases de dades (manipulació de dades), i inclouen càlculs complexos o manipulacions textuals de cadenes.

### Eines d'Intel·ligència empresarial

Una instal·lació típica inclou també les eines de Intel·ligència empresarial (anglès: bussiness intelligence o BI):

#### SSIS (SQL Server Integration Services)

Una eina de ETL que possibilita l'extracció de dades de diferents orígens (no solament SQL Server), la transformació d'aquestes dades, i la càrrega (generalment però no obligatòriament a magatzem de dades).

#### SSAS (SQL Server Analysis Services)

Una eina per crear Bases de dades Multidimensionales (no relacionals), que es pot explorar mitjançant extraccions de dades en diferents nivells d'agrupació, aprofundiment (Drill Down) d'una suma als seus detalls, i utilització de MDX (un llenguatge semblant a SQL, adaptat a bases de dades multidimensionals).

#### SSRS (SQL Server Reporting Services)

Una eina per crear i donar format a informes, atorgar drets de contemplació en ells, i la seva distribució. Es pot contemplar-los amb un Navegador web, i es pot exportar-los a arxius d'Excel, PDF, etc. les dades s'extreuen generalment del magatzem de dades o de l'OLAP.

## Desavantatges

* Des de la versió de SQL Server 2012 les consultes escrites en T-SQL no són retrocompatible amb la versió de SQL Server 2008 o anteriors.
* En versions de 32 bits, SQL Server usa Address Windowing Extension (AWE) per fer l'adreçament per sobre de 4 GB. Això li impedeix usar l'administració dinàmica de memòria, i només li permet allotjar un màxim de 64 GB de memòria compartida. Aquesta limitació és exclusiva de sistemes operatius 32 bits; en sistemes operatius 64 bits, la memòria màxima que es pot adreçar en Edició Estàndard és 64 Gb i en Edició Enterprise 4Tb

## Vegeu també

* Signum Framework
* Base de dades relacional
* Sistema de gestió de base de dades
** Oracle
** PostgreSQL
** InterBase
** Firebird
** MySQL

## Referències

* ↑ SQL Server Development History
* ↑ What's New in Microsoft SQL Server 7
* ↑ What's New in Microsoft SQL Server 2000
* ↑ Novetats de SQL Server 2005
* ↑ Novetats (SQL Server 2008)
* ↑ What's New in Microsoft SQL Server 2008 R2
* ↑ Novetats de SQL Server 2012
* ↑ Novetats de SQL Server 2014
* ↑ Característiques compatibles amb les edicions de SQL Server 2014
* ↑ «Connection Strings». Arxivat de l'original el 2021-01-26. [Consulta: 22 març 2021].

## Bibliografia addicional

* Lance Delano, Rajesh George et al. (2005). Wrox's SQL Server 2005 Express Edition Starter Kit (Programmer to Programmer). Microsoft Press. ISBN 0-7645-8923-7.
* Delaney, Kalen, et al. (2007). Inside SQL Server 2005: Query Tuning and Optimization. Microsoft Press. ISBN 0-7356-2196-9.
* Ben-Gan, Itzik, et al. (2006). Inside Microsoft SQL Server 2005: T-SQL Programming. Microsoft Press. ISBN 0-7356-2197-7.
* Klaus Elk (2018). SQL Server with C#. ISBN 1-7203-5867-2.

## Enllaços externs

* Microsoft SQL Server - Lloc web oficial
* Beginner's guide to SQL Server 2012