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 :

déclencheur DDL qui modifie le nom des tables


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut déclencheur DDL qui modifie le nom des tables
    Bonjour,
    J'ai à réaliser un tp de base de données et je bloque sur la première question :s
    Quelqu'un aurait-il donc une piste à me donner?

    La question est la suivante :
    Il faut que je réalise un déclencheur DDL qui me permette de respecter la règle de nommage suivante :

    nom table commencent par T_
    nom vue commencent par V_
    nom procédures commencent par P_
    nom fonction (UDF) commencent par F_
    nom contrainte de clef primaire commencent par PK_
    nom contrainte de clef étrangère commencent par FK_
    nom contrainte d'unicité commencent par UK
    nom contrainte de validité commencent par CK_

    Donc lorsque je crée une table par exemple, le déclencheur vérifie si elle commence par T_ et le rajoute si ce n'est pas le cas.

    Je crée un trigger for CREATE_TABLE mais je ne sais pas comment récupérer le nom de la table qui vient d'être créée pour faire mes vérifications de nom...

    Quelqu'un pourrait-il m'aider?
    Merci.

  2. #2
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2006
    Messages : 52
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Vous êtes sous quel version de SQL SERVER ?
    En 2005/2008 : avez vous regarder du côté du répertoire "policy management" (conditions et facets) de management studio ?

    l'introduction de ces règles applicatives dans sql server va le faire pour vous.
    Créez une condition d'abord et ensuite votre règle (qui va utiliser la condition préalablement créée)

    Christian

  3. #3
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    La réponse précédente de Christianbt est tout à fait correcte, et la mieux appropriée pour répondre à ta question.
    Je me permet de juste de préciser la traduction exacte du terme anglais "policy management". En français ce terme a été traduit par "Gestion basée sur des stratégies"

    Ci-dessous quelques liens intéressants traitant de ce sujet :
    http://mikedavem.developpez.com/tuto...l-server-2008/

    http://blog.developpez.com/elsuket/p...ase-de-d-2008/

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  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 : 42
    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
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Si c'est bien un trigger DDL que l'on vous demande, c'est dommage que vous n'ayez pas posté ce que vous avez écrit jusque là.

    Voici le trigger :

    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
    ALTER TRIGGER TR_DB_CHECK_OBJECT_NAME
    	ON DATABASE
    	FOR CREATE_TABLE, CREATE_VIEW, CREATE_PROCEDURE, CREATE_FUNCTION, ALTER_TABLE
    AS
    BEGIN
    	DECLARE	@ddl_event_data xml
    		, @object_name nvarchar(256)
    		, @object_type nvarchar(60)
    		, @new_object_name nvarchar(256)
     
    	-- Capture des caractéristiques de l'événement DDL
    	SET	@ddl_event_data = EVENTDATA()
     
    	-- Extraction du nom de l'objet
    	SELECT	@object_name = @ddl_event_data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(128)')
     
    	-- Recherche du type de l'object
    	SELECT	@object_type = type_desc
    	FROM	sys.objects
    	WHERE	name = @object_name
     
    	-- Calcul du nouveau nom de l'object, le cas échéant
    	SELECT	@new_object_name = CASE
    					WHEN @object_type = 'CHECK_CONSTRAINT' AND @object_name NOT LIKE 'CK?_%' ESCAPE '?' THEN 'CK_' + @object_name
    					WHEN @object_type = 'UNIQUE_CONSTRAINT' AND @object_name NOT LIKE 'UK?_%' ESCAPE '?' THEN 'UK_' + @object_name
    					WHEN @object_type = 'PRIMARY_KEY_CONSTRAINT' AND @object_name NOT LIKE 'PK?_%' ESCAPE '?' THEN 'PK_' + @object_name
    					WHEN @object_type = 'FOREIGN_KEY_CONSTRAINT' AND @object_name NOT LIKE 'CK?_%' ESCAPE '?' THEN 'FK_' + @object_name
    					WHEN @object_type = 'SQL_SCALAR_FUNCTION' AND @object_name NOT LIKE 'F?_%' ESCAPE '?' THEN 'F_' + @object_name
    					WHEN @object_type = 'SQL_INLINE_TABLE_VALUED_FUNCTION' AND @object_name NOT LIKE 'F?_%' ESCAPE '?' THEN 'F_' + @object_name
    					WHEN @object_type = 'SQL_TABLE_VALUED_FUNCTION' AND @object_name NOT LIKE 'F?_%' ESCAPE '?' THEN 'F_' + @object_name
    					WHEN @object_type = 'SQL_STORED_PROCEDURE' AND @object_name NOT LIKE 'P?_%' ESCAPE '?'THEN 'P_' + @object_name
    					WHEN @object_type = 'VIEW' AND @object_name NOT LIKE 'V?_%' ESCAPE '?' THEN 'V_' + @object_name
    					WHEN @object_type = 'USER_TABLE' AND @object_name NOT LIKE 'T?_%' ESCAPE '?' THEN 'T_' + @object_name
    				END
     
    	IF @new_object_name IS NOT NULL
    	BEGIN
    		EXEC sp_rename @object_name, @new_object_name
    	END	
    END
    @++

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    S'il s'agit juste de renommer les tables, alors dans le trigger récupérez le nom de l'objet ainsi que son schéma et utilisez la procédure sp_rename pour renommer .

    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/ * * * * *

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses, cela fonctionne. Je n'avais pas posté ce que j'avais déjà fait parce que je n'arrivais justement pas à récupérer le nom des tables, c'est ce qui me bloquait :s

Discussions similaires

  1. [AC-2002] Modifier les noms des tables sans casser les requêtes
    Par gandalf20000000 dans le forum Modélisation
    Réponses: 5
    Dernier message: 07/04/2010, 21h30
  2. Impossible de modifier le nom des tables
    Par Fabien50 dans le forum Requêtes
    Réponses: 4
    Dernier message: 03/06/2009, 13h11
  3. des fichiers qui portent les nom des tables
    Par khouja dans le forum Outils
    Réponses: 4
    Dernier message: 10/05/2009, 18h49
  4. [Import] Modifier le noms des tables
    Par ezdoor dans le forum Oracle
    Réponses: 5
    Dernier message: 27/01/2006, 18h24
  5. Modifier le nom des champs d'une table...
    Par Mr Capone dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/01/2005, 10h22

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