IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

passage à sql dynamque


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 12
    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 : 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
    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];

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

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

    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
    ;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

    @++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 12
    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

  4. #4
    Invité
    Invité(e)
    Par défaut
    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 ?

Discussions similaires

  1. Réponses: 7
    Dernier message: 10/02/2005, 13h44
  2. [SQL Server] Passage d'un paramètre dans une procédure
    Par navis84 dans le forum Bases de données
    Réponses: 3
    Dernier message: 14/01/2005, 13h19
  3. Réponses: 6
    Dernier message: 24/12/2004, 16h46
  4. passage de paramètres à un fichier SQL
    Par philfont dans le forum Administration
    Réponses: 5
    Dernier message: 30/08/2004, 15h01
  5. sql dynamic : passage de parametre entre quotes
    Par de LANFRANCHI dans le forum SQL
    Réponses: 12
    Dernier message: 26/05/2004, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo