Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

2 février 2014 7 02 /02 /février /2014 00:56

4 – Procédures stockées /Vues (Sql Server)

A-  SELECT

CREATE PROCEDURE SELECTContacts

AS

SELECT [ContactId],[ContactName],[ContactFirstName],[ContactAge],[CountryId]

FROM [Contact]

GO

 

CREATE PROCEDURE SELECTContact(@ContactId int)

AS

SELECT [ContactId],[ContactName],[ContactFirstName],[ContactAge],[CountryId]

FROM [Contact]

 WHERE [ContactId]=@ContactId

GO

 

CREATE PROCEDURESELECTContactsOfCountry(@CountryId int)

AS

SELECT [ContactId],[ContactName],[ContactFirstName],[ContactAge],[CountryId]

FROM [Contact] WHERE [CountryId]=@CountryId

GO

 

B – INSERT / UPDATE / DELETE

CREATE PROCEDURE INSERTContact(@ContactName char(100),@ContactFirstName char(100),@ContactAge int,@CountryId int)

AS

INSERT INTO [Contact]([ContactName] ,[ContactFirstName] ,[ContactAge] ,[CountryId] )

VALUES(@ContactName,@ContactFirstName,@ContactAge,@CountryId)

SELECT SCOPE_IDENTITY();

GO

CREATE PROCEDURE UPDATEContact(@ContactId int,@ContactName char(100),@ContactFirstName char(100),@ContactAge int,@CountryId int)

AS

UPDATE [Contact] SET[ContactName]=@ContactName,[ContactFirstName]=@ContactFirstName,[ContactAge]=@ContactAge,[CountryId]=@CountryId

WHERE [ContactId]=@ContactId

GO

CREATE PROCEDURE DELETEContact(@ContactId int)

AS

DELETE FROM [Contact]

WHERE [ContactId]=@ContactId

GO

 

C - mêmes exemples pour MS ACCESS

CREATE PROCEDURE SELECTContacts

AS

SELECT [ContactId],[ContactName],[ContactFirstName],[CountryId]

FROM [Contact]

GO

CREATE PROCEDURESELECTContactsOfCountry(parCountryId int)

AS

SELECT [ContactId],[ContactName],[ContactFirstName],[CountryId]

FROM [Contact] WHERE [CountryId]=parCountryId

GO

CREATE PROCEDURE INSERTContact(parContactName VarChar(100),parContactFirstName VarChar(100),parCountryId int)

AS

INSERT INTO [Contact]([ContactName] ,[ContactFirstName] ,[CountryId] )

VALUES(parContactName,parContactFirstName,parCountryId)

GO

CREATE PROCEDURE SELECTContact(parContactId int)

AS

SELECT [ContactId],[ContactName],[ContactFirstName],[CountryId]

FROM [Contact]

 WHERE [ContactId]=parContactId

GO

CREATE PROCEDURE UPDATEContact(parContactId int,parContactName VarChar(100),parContactFirstName VarChar(100),parCountryId int)

AS

UPDATE [Contact] SET[ContactName]=parContactName,[ContactFirstName]=parContactFirstName,[CountryId]=parCountryId

WHERE [ContactId]=parContactId

GO

CREATE PROCEDURE DELETEContact(parContactId int)

AS

DELETE FROM [Contact]

WHERE [ContactId]=parContactId

GO

D – EXECUTE

EXECUTE INSERTCountry 'France'

EXECUTE INSERTContact 'Dupond','paul',20,1

EXECUTEINSERTContact'Durand','luc',40,1

 

EXECUTE SELECTCountrys

 

 

Astuces :

-    en transact-sql les vues sont précédées de v_ et les procédures stockées de sp_

 

E- Variable

CREATE PROCEDURE sp_contactcount

AS

DECLARE @result Int

SELECT @result=count(*)

FROM Contact

RETURN @result

GO

 

5 – Astuce /ordre des requêtes

 

Pour éviter les conflits avec les contraintes lorsque l’on doit ajouter des données en même temps que l’on crée des tables

 

a-  création des tables

b-  ajout des données

c-  ajout des contraintes(clé primaires,secondaires)

 

exemples : ajout de données sous sql server, le problème ici étant la clé auto incrémentée

SET IDENTITY_INSERT [Country] ON INSERT INTO [Country]([CountryId],[CountryName])

VALUES(1,'France');

 

 

Sous access une clé auto incrément n’empèche pas de définir la valeur voulue

INSERT INTO [Country]([CountryId],[CountryName])

VALUES(1,'France') ;                                                                           

 

 

6 – TRANSACTIONS –

 

A-  BEGIN / COMMIT /ROLLBACK

 

Exemple : on supprime tous les contacts mais rollback annule cette suprression

 

BEGIN TRANSACTION

DELETE FROM [Contact];

ROLLBACK;

COMMIT TRANSACTION

 

Attention à la ponctuation , ne pas mettre de virgules

 

Astuce : pour garder l’intégrité de la base

B - nommer la transaction/@@ERROR <>0

 

BEGIN TRANSACTION T

DELETE FROM [Contact]

if @@error <>0 ROLLBACK

COMMIT TRANSACTION T

 

 

Autre exemple

BEGIN TRANSACTION T

INSERT INTO [Country]([CountryName])VALUES('Suisse')

IF @@ERROR <>0 ROLLBACK

INSERT INTO [Country]([CountryName])VALUES('Bulgarie')

IF @@ERROR <>0 ROLLBACK

COMMIT TRANSACTION T

 

 

B-  Point de sauvegarde

 

SAVE TRANSACTION MySave

ROLLBACK TRANSACTION MySave

 

Exemple

 

BEGIN TRANSACTION T

INSERT INTO [Country]([CountryName])VALUES('Belgique')

SAVE TRANSACTION MySave

INSERT INTO [Country]([CountryName])VALUES('Espagne')

IF @@ERROR <>0 ROLLBACK TRANSACTION MySave

COMMIT TRANSACTION T

Partager cet article

Repost 0
Published by Romagny13 - dans SQL
commenter cet article

commentaires