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
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.
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 )
Une fois un enregistrement inséré, on peut récupérer le dernier Id inséré avec @@IDENTITY
.
On peut utiliser le mot TOP
, ce qui retournera les x
premiers enregistrements.
SELECT TOP 10 * FROM [Etudiant];
DECLARE @p0 nvarchar(30) SET @p0 = 'Rob'
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;
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)
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);
DECLARE @variable INT; SET @variable = ( SELECT COUNT(*) FROM Employes )
DECLARE @variable1 INT, @variable2 VARCHAR(100); SELECT @variable1 = CodeEmploye, @variable2 = Nom FROM Employes WHERE IdEmploye = 1
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 |
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