bases_de_donnees:sqlserver:divers
Table des matières
Curseurs
Code de base pour un curseur:
DECLARE @Id INT DECLARE MY_CURSOR CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY FOR SELECT DISTINCT Id FROM TableName OPEN MY_CURSOR FETCH NEXT FROM MY_CURSOR INTO @Id WHILE @@FETCH_STATUS = 0 BEGIN PRINT @Id FETCH NEXT FROM MY_CURSOR INTO @Id END CLOSE MY_CURSOR DEALLOCATE MY_CURSOR
Classements
Un classement, ou collation en anglais, est une façon de déterminer le tri et les comparaisons de chaînes (nchar, nvarchar et ntext) dans une base de données.
Convertion de classement
On peut convertir un classement, si par exemple, on fait une requête qui implique plusieurs bases de données qui n'ont pas le même classement.
CAST(nomColonne AS VARCHAR(50)) COLLATE French_CI_AS )
Opérations de base
Insertion
Une fois un enregistrement inséré, on peut récupérer le dernier Id inséré avec @@IDENTITY
.
PIVOT et UNPIVOT
Limiter le nombre d'enregistrements
On peut utiliser le mot TOP
, ce qui retournera les x
premiers enregistrements.
SELECT TOP 10 * FROM [Etudiant];
Declarer des variables scalaires
DECLARE @p0 nvarchar(30) SET @p0 = 'Rob'
Séquence
WITH Units ( nbr ) AS ( SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 ) SELECT u3.nbr * 100 + u2.nbr * 10 + u1.nbr + 1 AS "Number" FROM Units u1, Units u2, Units u3 WHERE u3.nbr * 100 + u2.nbr * 10 + u1.nbr + 1 <= 500 ORDER BY Number ASC;
DDL
Contraintes
Foreign key
CREATE TABLE Employes ( Id int NOT NULL PRIMARY KEY, Nom varchar(100) NOT NULL, PersonneId int FOREIGN KEY REFERENCES Personnes(Id) )
CREATE TABLE Employes ( Id int NOT NULL, int NOT NULL, PersonneId int, PRIMARY KEY (Id), CONSTRAINT fk_PerEmployes FOREIGN KEY (PersonneId) REFERENCES Persons(Id) )
ALTER TABLE dbo.EMPLOYE ADD CONSTRAINT FK_EMPLOYE_EMPLOYE_PERSONNE FOREIGN KEY (EMPLOYE_PK) REFERENCES dbo.EMPLOYE_EMPLOYE_PERSONNE(EMPLOYE_PK)
UNIQUE
CREATE TABLE EMPLOYES ( Id int NOT NULL, Code varchar(15) NOT NULL, PersonneId int NOT NULL, CONSTRAINT uc_PersonID UNIQUE (Code, PersonneId) )
ALTER TABLE EMPLOYES ADD CONSTRAINT uk_employe_personne UNIQUE (EMPLOYE_PK, PERSONNE_PK);
Variables
Assigner une variable à partir d'un SELECT
DECLARE @variable INT; SET @variable = ( SELECT COUNT(*) FROM Employes )
Assigner plusieurs variables à partir d'un SELECT
DECLARE @variable1 INT, @variable2 VARCHAR(100); SELECT @variable1 = CodeEmploye, @variable2 = Nom FROM Employes WHERE IdEmploye = 1
Fonctions
DENSE_RANK()
Le DENSE_RANK()
peut être utile pour numéroter les valeurs semblables.
Par exemple, si on veut numéroter par 1 tous les Alain, par 2 tous les Albert, par 3 tous les Annie, etc.
SELECT DENSE_RANK() OVER (ORDER BY Nom DESC) AS DenseRank, Nom, AutreValeur FROM Personnes
DenseRank | Nom | AutreValeur |
---|---|---|
1 | Alain | 990 |
1 | Alain | 400 |
2 | Albert | 1010 |
3 | Annie | 500 |
3 | Annie | 100 |
3 | Annie | 75 |
Transactions
SET xact_abort ON BEGIN TRAN T1; -- code sql.... COMMIT TRAN T1;
BEGIN TRY BEGIN TRANSACTION INSERT INTO myTable (myColumns ...) VALUES (myValues ...); INSERT INTO myTable (myColumns ...) VALUES (myValues ...); INSERT INTO myTable (myColumns ...) VALUES (myValues ...); COMMIT TRAN -- Transaction Success! END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRAN --RollBack in case of Error -- you can Raise ERROR with RAISEERROR() Statement including the details of the exception RAISERROR(ERROR_MESSAGE(), ERROR_SEVERITY(), 1) END CATCH
Ressources
bases_de_donnees/sqlserver/divers.txt · Dernière modification : 2022/02/02 00:42 de 127.0.0.1