Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/01/2011, 10h55   #1
Membre du Club
 
Homme
Chef de projet
Inscription : février 2009
Messages : 137
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 56

Informations professionnelles :
Activité : Chef de projet
Secteur : Biens de consommation

Informations forums :
Inscription : février 2009
Messages : 137
Points : 67
Points : 67
Par défaut Création Vue dynamique

Bonjour,

J'utilise une procedure qui fonctionne, dont voici le code


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
CREATE PROCEDURE [dbo].[pkCreateVueTEST]
 @datelecture varchar(20)
AS
BEGIN 
 SET NOCOUNT ON;
 SET DATEFORMAT DMY;
 
 
 --Supprime avant création
 IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[MAVUE]'))
 DROP VIEW [dbo].[MAVUE]
 
 exec('create view [dbo].[MAVUE] as 
    select id, nom, datetest from MATABLE
    where datetest >= ''' + @datelecture + ''' ; ');
 
END
GO

Mais je voudrais rendre le nom de la vue dynamique en utilisant le nom du poste :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
CREATE PROCEDURE [dbo].[pkCreateVueTEST]
 @datelecture varchar(20)
AS
BEGIN 
 SET NOCOUNT ON;
 SET DATEFORMAT DMY;
 
 DECLARE @TEST as varchar(128);
 SET @TEST='[dbo].[MAVUE]'+(SELECT host_name());
 
 --Supprime avant création
 IF  EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(@TEST))
 DROP VIEW @TEST
 
 exec('create view ' + @TEST + ' as 
    select id, nom, datetest from MATABLE
    where datetest >= ''' + @datelecture + ''' ; ');
 
END
GO
Le drop view sur le nom de table, tel que je l'écris ne passe pas à la compilation.
Pouvez-vous m'aider sur ce point ?

Merci
castorcharly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 10h23   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Puisque vous tu fais déjà un EXEC pour créer la vue, fais un EXEC pour la supprimer aussi...

mais... c'est indiscret de te demander pourquoi tu fais ça ?

pourquoi créer et supprimer des vues comme ca ?
As tu l'intention des les indexer ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 11h07   #3
Membre du Club
 
Homme
Chef de projet
Inscription : février 2009
Messages : 137
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 56

Informations professionnelles :
Activité : Chef de projet
Secteur : Biens de consommation

Informations forums :
Inscription : février 2009
Messages : 137
Points : 67
Points : 67
Citation:
Envoyé par aieeeuuuuu Voir le message
Bonjour

Puisque vous tu fais déjà un EXEC pour créer la vue, fais un EXEC pour la supprimer aussi...

mais... c'est indiscret de te demander pourquoi tu fais ça ?

pourquoi créer et supprimer des vues comme ca ?
As tu l'intention des les indexer ?
Pas d'indiscrétion

C'est simplement, parce que chaque poste client utilise ponctuellement cette vue en fonction du paramètre en entrée et ce paramètre est différent par poste. Elle me permet de faire une requete limité à un nombre de ligne "raisonable", car j'ai plus de 100 millions de ligne et ça augmente chaque année de 50 millions. Je gagne de cette manière, beaucoup de temps, car j'effectue sur les 25 millions de ligne résultant de la vue, plusieurs milliers de select incluant des COUNT et des SUM.

Je vais passer sur exec, je n'y avait pas pensé.

merci
castorcharly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 11h24   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par castorcharly Voir le message
Elle me permet de faire une requete limité à un nombre de ligne "raisonable",
Une clause WHERE dans un requete fait cela très bien

Citation:
car j'ai plus de 100 millions de ligne et ça augmente chaque année de 50 millions. Je gagne de cette manière, beaucoup de temps,
Il faut alors placer les index adéquat...

Citation:
car j'effectue sur les 25 millions de ligne résultant de la vue, plusieurs milliers de select incluant des COUNT et des SUM.
Dans ce cas, il peut etre intéressant de créer une (et une seule) vue qui effectue ces calculs, et d'indexer cette vue.
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 14h25   #5
Membre du Club
 
Homme
Chef de projet
Inscription : février 2009
Messages : 137
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 56

Informations professionnelles :
Activité : Chef de projet
Secteur : Biens de consommation

Informations forums :
Inscription : février 2009
Messages : 137
Points : 67
Points : 67
Citation:
Envoyé par aieeeuuuuu Voir le message
Une clause WHERE dans un requete fait cela très bien


Il faut alors placer les index adéquat...


Dans ce cas, il peut etre intéressant de créer une (et une seule) vue qui effectue ces calculs, et d'indexer cette vue.
La clause where est moins efficace car le champ de la clause n'est effectivement pas indexé et je n'ai pas la possibilité de faire ce que je veux sur cette table. D'où le passage via une view dyna qui me donne toute satisfaction en terme de vitesse.

Merci pour ton aide
castorcharly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2011, 15h12   #6
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par castorcharly Voir le message
La clause where est moins efficace car le champ de la clause n'est effectivement pas indexé et je n'ai pas la possibilité de faire ce que je veux sur cette table.
heu... pourquoi ?


Citation:
D'où le passage via une view dyna qui me donne toute satisfaction en terme de vitesse.
:
Si la vue n'est elle même pas indexée, je ne vois pas comment elle peut te donner de meilleures perf qu'une requete avec un filtre...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h00.


 
 
 
 
Partenaires

Hébergement Web