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 18/08/2011, 12h08   #1
Invité de passage
 
Inscription : juillet 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 12
Points : 0
Points : 0
Par défaut passage à sql dynamque

Bonjour j'ai une table de test dbo.[table test] et une colonne [ville] dans ma base de données.Le but de ma table temporaire est de remplacer les noms de villes dans les colonnes de la table test par les noms choisis aléatoirement dans cette liste.

Mon problème est le passage aux parametres en effet je souhaite creer une sp Create procedure Change_ville (@nom_table varchar(max),nom_colonne(varchar(max))

Mon probleme est donc de transformer mon script sql ci dessous (create table...........defini avec les @nom_table=table test et @colonne=ville à une procedure stockee dynamique .J'ai commencé le changement

qui a une solution optimale svp?

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
46
47
48
CREATE TABLE [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] ([ville] nchar(10));
 
INSERT INTO [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] ([ville]) VALUES('new-york');
INSERT INTO [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] ([ville]) VALUES('paris');
INSERT INTO [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] ([ville]) VALUES('bombay ');
INSERT INTO [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] ([ville]) VALUES('douala ');
INSERT INTO [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] ([ville]) VALUES('calcuta');
INSERT INTO [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] ([ville]) VALUES('rome');
INSERT INTO [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] ([ville]) VALUES('amsterdam');
INSERT INTO [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] ([ville]) VALUES('londres ');
INSERT INTO [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] ([ville]) VALUES('sydney');
DECLARE @SrcRecCount AS INTEGER;
DECLARE @SubstRecCount AS INTEGER;
DECLARE @CopiesOfFullSet AS INTEGER;
SELECT @SrcRecCount = COUNT(*) FROM [dbo].[Table_sir_test2];
SELECT @SubstRecCount = COUNT(*) FROM [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b];
SET @CopiesOfFullSet = @SrcRecCount / @SubstRecCount;
 
CREATE TABLE [#ShuffleRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] (Id int IDENTITY(1,1), [ville] nchar(10));
 
DECLARE @i AS INTEGER;
SET @i = 0;
 
WHILE @i < @CopiesOfFullSet 
  BEGIN 
    INSERT INTO [#ShuffleRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] 
    SELECT [ville] 
    FROM [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] 
    ORDER BY NEWID();
 
    SET @i = @i + 1;
  END 
 
INSERT INTO [#ShuffleRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] 
SELECT TOP (@SrcRecCount - @SubstRecCount * @CopiesOfFullSet) [ville] 
FROM [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] 
ORDER BY NEWID();
UPDATE src 
SET src.[ville] = shuffled.[ville]
FROM (SELECT ROW_NUMBER() OVER(ORDER BY [ville] DESC) AS 'RowNumber' 
      , * 
      FROM [dbo].[Table_sir_test2]) AS src 
  INNER JOIN [#ShuffleRecs65318373-70c0-46b0-9aa6-7e0a61886f7b] AS shuffled 
    ON shuffled.Id = src.RowNumber 
 
-- Cleanup
DROP TABLE [#ShuffleRecs65318373-70c0-46b0-9aa6-7e0a61886f7b];
DROP TABLE [#SubstituteRecs65318373-70c0-46b0-9aa6-7e0a61886f7b];
cedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 16h27   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

A priori vous avez fait extrêmement compliqué alors qu'on peut faire bien plus simple, en une seule requête :

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
;WITH
	CTE (ville, id) AS
	(
		SELECT	ville
			, ROW_NUMBER() OVER(ORDER BY ville DESC) AS id
		FROM	(
				SELECT 'new-york' AS ville
				UNION ALL SELECT 'paris'
				UNION ALL SELECT 'bombay'
				UNION ALL SELECT 'douala'
				UNION ALL SELECT 'calcuta'
				UNION ALL SELECT 'rome'
				UNION ALL SELECT 'amsterdam'
				UNION ALL SELECT 'londres'
				UNION ALL SELECT 'sydney'
			) AS V
		ORDER	BY NEWID()
	)
UPDATE		SRC
SET		SRC.ville = S.ville
FROM		(
			SELECT	ROW_NUMBER() OVER(ORDER BY ville DESC) AS RowNumber
				, *
			FROM	dbo.Table_sir_test2
		) AS SRC
INNER JOIN	CTE AS S
			ON S.Id = SRC.RowNumber
Il n'est en outre nul besoin d'utiliser des tables temporaires, qui sont de véritables tables.
La seule différence avec une table que vous créez dans une base de données utilisateur est que celle-ci est crée dans une base de données système nommée TempDB, et dans laquelle vous n'avez rien à faire du tout.
SQL Server l'utilise pour bien d'autres opérations (tris, jointures, ...), et vous venez l'y déranger !
Il en va de même pour les variables de type TABLE (DECLARE @maTable TABLE).
J'y ai consacré un billet, que je vous invite à lire

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 11h01   #3
Invité de passage
 
Inscription : juillet 2011
Messages : 12
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 12
Points : 0
Points : 0
Par défaut New reponse

Bonjour

En fait ma question n'etait pas de creer une requete mais une procedure stockéé oou fonction (@nom_table,@nom_colonne) qui gfait le mme boulot
cedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 14h29   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
Citation:
Envoyé par cedro Voir le message
En fait ma question n'etait pas de creer une requete mais une procedure stockéé oou fonction (@nom_table,@nom_colonne) qui gfait le mme boulot
Et où est le problème ?
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ 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 16h11.


 
 
 
 
Partenaires

Hébergement Web