Bonjour à tous

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


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?