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

Développement SQL Server Discussion :

Renommer table SQL Server


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut Renommer table SQL Server
    bonjour,

    je renomme en python plusieurs tables de cette façon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cursor.execute("exec sp_rename '[anciennom]','news'")
    mon problème est que cela crée deux tables.. La table renommé et l'ancienne reste dans la base mais donne une "erreur DBMS table not found" ce qui en soi est normal puisque que j'ai changé de nom..

    même en rafraîchissant la base, cette table apparaît tjrs...

    Quelqu 'un a t il rencontré ce type de problème??
    j'utilise le module pymssql ? cela peut il venir de cette librairie??

    merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    C'est une connerie d'utiliser un curseur pour faire cela car vous gérez sans doute par défaut une monstrueuse transaction....
    Utilisez un script Transact SQL dynamique pour ce faire.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    salut,

    désolé j'ai mis du temps à répondre...

    "exec sp_rename" c 'est du Transact SQL? mais du coup pouvez vous me donner des liens concernant ce "Transact SQL dynamique"

    j'était obligé de passer par du python pour réalisé ce projet... et oui je me suis rendu compte que cela n'était pas aussi simple...

    a+

  4. #4
    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,

    Vous pouvez procéder comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DECLARE @sql nvarchar(max)
     
    SELECT	@sql = CASE WHEN @sql IS NULL THEN '' ELSE @sql END
    			+ 'EXEC sp_rename @objname = ''' + src + ''', @newname = ''' + tgt + ''';' + CHAR(13) + CHAR(10)
    FROM	(
    		VALUES('table_source1', 'table_cible1')
    			, ('table_source2', 'table_cible2')
    			, ('table_source3', 'table_cible3')
    	) AS T(src, tgt)
     
    EXEC sp_executesql @sql
    Mais vous voudrez peut-être industrialiser la tâche, en faisant appel à une procédure stockée.
    Vous pouvez pour ce faire vous en remettre à un type table définit par l'utilisateur (User-Defined Table Type) :

    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
    CREATE TYPE dbo.table_to_rename AS TABLE
    (
    	table_source_name varchar(128) NOT NULL
    	, table_cible_name varchar(128) NOT NULL
    )
    GO
     
    CREATE PROCEDURE p_table_rename
    	@table_list dbo.table_to_rename READONLY
    AS
    BEGIN
    	SET NOCOUNT ON
     
    	DECLARE @sql nvarchar(max)
     
    	SELECT	@sql = CASE WHEN @sql IS NULL THEN '' ELSE @sql END
    				+ 'EXEC sp_rename @objname = ''' + table_source_name + ''', @newname = ''' + table_cible_name + ''';'
    				+ CHAR(13) + CHAR(10)
    	FROM	@table_list
     
    	EXEC sp_executesql @sql
    END
    Je ne sais pas comment on peuple une variable de type table en Python, et visiblement la littérature sur le sujet est relativement pauvre.
    Alternativement, on peut passer un document XML à la procédure, ce qui vous arrangera peut-être : supposons le document XML suivant :

    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
    DECLARE @x xml = '
    <BatchRename>
    	<TableRename>
    		<Source>table_source1</Source>
    		<Cible>table_cible1</Cible>
    	</TableRename>
    	<TableRename>
    		<Source>table_source2</Source>
    		<Cible>table_cible2</Cible>
    	</TableRename>
    	<TableRename>
    		<Source>table_source3</Source>
    		<Cible>table_cible3</Cible>
    	</TableRename>
    </BatchRename>'
    La procédure est alors :

    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
    CREATE PROCEDURE p_table_rename
    	@batch_rename xml
    AS
    BEGIN
    	SET NOCOUNT ON;
     
    	DECLARE @sql nvarchar(max);
     
    	WITH
    		CTE AS
    		(
    			SELECT		N.n.value('(./Source)[1]', 'varchar(128)') AS table_source_name
    					, N.n.value('(./Cible)[1]', 'varchar(128)') AS table_cible_name
    			FROM		(VALUES(@x)) AS X(x)
    			CROSS APPLY	X.x.nodes('/BatchRename/TableRename') AS N(n)
    		)
    	SELECT	@sql = CASE WHEN @sql IS NULL THEN '' ELSE @sql END
    				+ 'EXEC sp_rename @objname = ''' + table_source_name + ''', @newname = ''' + table_cible_name + ''';'
    				+ CHAR(13) + CHAR(10)
    	FROM	CTE;
     
    	EXEC sp_executesql @sql;
    END
    @++

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Par défaut
    super merci bcp.

    je regarde tt cela;

Discussions similaires

  1. [Python 2.X] renommer table sql server
    Par bernards111 dans le forum Général Python
    Réponses: 7
    Dernier message: 16/02/2017, 15h35
  2. fonction sortant une table SQL server
    Par Lolomenfin dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/12/2006, 10h32
  3. lier une table Sql Server sur Access
    Par JerBi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/01/2006, 16h27
  4. Insertion dans table SQL server (Trigger) Aidz moi SVP????
    Par pop bob dans le forum Développement
    Réponses: 2
    Dernier message: 30/07/2005, 23h55
  5. [C#] Récupération d'une image depuis une table SQL Server
    Par borgfabr dans le forum Accès aux données
    Réponses: 10
    Dernier message: 08/04/2004, 13h20

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