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 :

[SQL SERVER 2K][TSQL]Créer une colonne calculé avec des données venant d'autre table


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 10
    Points
    10
    Par défaut [SQL SERVER 2K][TSQL]Créer une colonne calculé avec des données venant d'autre table
    Bonjour,
    Je souhaiterai savoir comme faire pour créer une colonne calculé dans laquelle je souhaiterai mettre des données provenant d'un autre table.
    Cela pourrait potentiellement donné ca comme formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE TABLEA ADD [NEWFIELD] AS ([TABLEB].[FIELD1] + [TABLEB].[FIELD2])
    Est ce que c'est possible?
    Comment faire sinon?
    Merci pour votre aide.

  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
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    SQL Server n'autorise pas des colonnes calculées "AS" avec des données provenant d'autres tables de par le fait que le schéma d'une table peut être modifié.

    En revanche vous pouvez alimenter une colonne d'une table par l'intermédiaire d'un trigger.

    Dans votre cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ALTER TABLE MonSchéma.Matable 
    ADD MaColonnne MonTypeSQL
    GO
     
    CREATE TRIGGER E_MonTrigger
    ON MonSchéma.MonAutreTable
    FOR INSERT, UPDATE, DELETE
    AS
     
    UPDATE MonSchéma.Matable 
    SET MaColonne = Colonne1 + COlonne 2
    FROM    MonSchéma.Matable  T
          INNER JOIN  MonSchéma.MonAutreTable TT
                    ON T.??? = TT.???
    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 à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 10
    Points
    10
    Par défaut

    C'est pas juste.........
    Bon et bien je vais faire avec dommage.
    Et en SQL SERVER 2005 c'est la même chose qu'en 2000?
    Obligé de passer par un trigger?

    tu dis :
    SQL Server n'autorise pas des colonnes calculées "AS" avec des données provenant d'autres tables de par le fait que le schéma d'une table peut être modifié.
    Et sans un "AS" c'est possible?

    Merci encore

  4. #4
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Tu peux aussi faire une vue ...
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    J'y pense maintenant mais si j'utilise un trigger comment vais je faire pour savoir quelle ID à été traité.
    Je m'explique.
    Je fais une mise à jour dans ma table B où je met à jour un article, le trigger se déclanche après la mise à jour.
    Comment vais je faire pour savoir quel article à été mis à jour?
    Je fais comment pour passer cette variable dans mon trigger?
    Merci

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    quel est votre modèle de données ? Il y a bien des clefs dans vos tables ???

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

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    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
     
    CREATE TABLE [TABLE_A] (
    	[N_ARTICLE_ID] [bigint] NOT NULL ,
    	[V_DATA_1] [char] (12) COLLATE SQL_Latin1_General_CP1_CS_AS NULL ,
    	[V_DATA_2] [varchar] (65) COLLATE SQL_Latin1_General_CP1_CS_AS NULL ,
    	CONSTRAINT [PK_TABLE_A] PRIMARY KEY  CLUSTERED 
    	(
    		[N_ARTICLE_ID]
    	)  ON [PRIMARY] 
    }ON [PRIMARY]
    GO
     
    CREATE TABLE [TABLE_B] (
    	[N_ARTICLE_ID] [bigint] NOT NULL ,
    	[V_DATA_INFO] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CS_AS NULL ,
    	CONSTRAINT [PK_TABLE_B] PRIMARY KEY  CLUSTERED 
    	(
    		[N_ARTICLE_ID]
    	)  ON [PRIMARY] ,
    	CONSTRAINT [FK_TABLE_B] FOREIGN KEY 
    	(
    		[N_ARTICLE_ID]
    	) REFERENCES [TABLE_A] (
    		[N_ARTICLE_ID]
    	)
    }ON [PRIMARY]
    GO
    Donc lorsque je met à jour ma table A pour l'ID 10 je souhaite mettre à jour ma table B pour ce même id où je vais concaténer les valeurs V_DATA_1 + V_DATA_2

    j'espère que cela peut aider à la compréhension

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TRIGGER E_MonTrigger
    ON A
    FOR INSERT, UPDATE, DELETE
    AS
     
    UPDATE B 
    SET    MaColonne = V_DATA_1 + V_DATA_2
    FROM   B
          INNER JOIN  A
                    ON A.N_ARTICLE_ID  = B.N_ARTICLE_ID
    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/ * * * * *

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Merci de ta réponse.
    Mais jsutement je pensais faire ca mais je me posais la question suivante :
    Il ne va pas faire une mise à jour de toute la table?
    Car j'ai des millions d'enregistrement.
    c'est sur qu'il va traité que l'ID qui vient d'être modifié?
    Merci

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    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 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Tu ne m'as pas donné la description SQL de tes tables de sorte que je ne sait pas la clef primaire des tables....

    A toi de compléter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TRIGGER E_MonTrigger
    ON A
    FOR INSERT, UPDATE, DELETE
    AS
     
    UPDATE B 
    SET    MaColonne = V_DATA_1 + V_DATA_2
    FROM   B
           INNER JOIN A
                 ON A.N_ARTICLE_ID  = B.N_ARTICLE_ID
           INNER JOIN inserted i
                 ON A.??? = i.???
    A l'avenir POSTE EN RESPECTANT LES CHARTES DE POSTAGE !

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

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    Autant pour moi j'ai oublié de mettre en forme.......
    Donc j'ai repris mes messages et je les ai arrangé.
    Donc maintenant tu as un script SQL qui te premet de voir les clefs primaires des tables et les liens de clef étrangères.
    J'espère que tu pourras me répondre à la question :

    Il ne va pas faire une mise à jour de toute la table?
    Car j'ai des millions d'enregistrement.
    c'est sur qu'il va traité que l'ID qui vient d'être modifié?
    Merci

  12. #12
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Citation Envoyé par rabbiwan Voir le message
    Bonjour,
    Autant pour moi j'ai oublié de mettre en forme.......
    Donc j'ai repris mes messages et je les ai arrangé.
    Donc maintenant tu as un script SQL qui te premet de voir les clefs primaires des tables et les liens de clef étrangères.
    J'espère que tu pourras me répondre à la question :

    Merci
    de lire les tutoriaux comme il est indiqué dans les règles... http://sqlpro.developpez.com/cours/s...ransactsql/#L5

    Tu comprendras aisément à quoi sert ceci.

    De plus, une simple lecture du trigger fourni te permettre de répondre à tes questions...

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [T-SQL][SQL Server 2k]Taille d'une colonne
    Par nox75 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/02/2011, 06h18
  2. [SQL Server] syntaxe pour ajouter une colonne à une table
    Par gloglo dans le forum Langage SQL
    Réponses: 8
    Dernier message: 10/09/2009, 11h43
  3. Réponses: 1
    Dernier message: 27/11/2008, 18h00
  4. [SQL SERVER 2005] comment créer une base de données ?
    Par Syrrus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/03/2007, 14h26
  5. [C#/SQL Server 2005] Comment créer une base de donnée par le code ?
    Par FraktaL dans le forum Accès aux données
    Réponses: 4
    Dernier message: 09/09/2006, 17h27

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