Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
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 16/11/2011, 13h03   #1
Membre Expert
 
Homme Benoît
Inscription : février 2003
Messages : 1 200
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : février 2003
Messages : 1 200
Points : 1 781
Points : 1 781
Par défaut Utilisation d'une table temporaire

Bonjour à tous

J'ai cette procédure, je jure que c'est pas moi qui l'ai écrite


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
CREATE PROCEDURE GetList
(
	@Param1	INT,
	@Param2	INT,
	@ParamZ	BIT
)
AS
BEGIN
	SET NOCOUNT ON;
 
/*Copie de Table1*/
CREATE TABLE TempTable(
	Col1 [int] NOT NULL,
             ...
	Col8 [int]
	) 
 
INSERT TempTable 
SELECT 
    Table1.Col1,
    ...
    Table1.Col8
FROM Table1
    INNER JOIN Table2 ON Table1.Col1 = Table2.Col2
WHERE Table2.ColA = @Param1 AND Table2.ColB = @Param2
ORDER BY Table1.Col1 ASC
 
IF @ParamZ>0 AND EXISTS (SELECT ColX,ColY FROM Table3 WHERE ColZ = @ParamZ)
BEGIN
	DECLARE @ColX INT
	DECLARE @ColY INT
	SELECT @ColX=ColX, @ColY=ColY  FROM Table3 WHERE ColZ = @ParamZ;
	IF @ColX IS NOT NULL
		DELETE T1 FROM TempTable T1
		INNER JOIN Table2 ON Table1.Col1 = Table2.Col2
		WHERE Table2.ColX <> @ColX
	IF @ColY IS NOT NULL
		DELETE T1 FROM TempTable T1
		INNER JOIN Table2 ON Table1.Col1 = Table2.Col2
		WHERE Table2.ColY <> @ColY
END
 
SELECT * FROM TempTable
DROP TABLE TempTable
END

1) Je trouve qu'utiliser le nom TempTable c'est très très mal (utilisé dans plusieurs procédure)
2) Ne pas vérifier si la table existe déjà c'est très mal
3) Je trouve qu'il serait plus logique d'utiliser une table temporaire voir une table variable?

Est ce que si j'utilise une table variable je dois faire le drop? (je ne pense pas) part contre avec une table temporaire bien c’est exacte?

Existe-t-il un moyen de faire une copie de la structure de la table, je ne trouve pas très esthétique le fait de préciser le type de champ (voir même les noms)

Avez-vous d’autre conseils ?
__________________
Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes
BenoitM est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 13h28   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
OUI : à vu de nez tout cela peut se résumer à une seule et unique requête, probablement avec l'aide de la clause OUTPUT.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 10h31   #3
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

Je dirai même sans clause OUTPUT, puisque si j'ai bien compris, cette procédure ne fait qu'afficher des données en fonction de certains critères et une simple SELECT fera l'affaire...

Par contre, une ligne de votre SP m'interpelle :
Code SQL :
1
2
 
SELECT @ColX=ColX, @ColY=ColY  FROM Table3 WHERE ColZ = @ParamZ;

La colonne ColZ a-t-elle une contrainte d'unicité ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h55.


 
 
 
 
Partenaires

Hébergement Web