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 :

[2005 Express] Déclaration TABLE


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    CUCARACHA
    Invité(e)
    Par défaut [2005 Express] Déclaration TABLE
    Salut,

    Je bosse sur une proc qui utilise une fonction(Table) slip développées en T-SQL.

    Elle renvoie une table qui contient un élément de la chaîne à découper par enreg.

    Voici l'extrait du source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	DECLARE @tStrings TABLE
    	(    
    	  position int,
    	  value varchar(max)   
    	)
    	INSERT INTO @tStrings (position,value) 
    		SELECT position,value FROM dbo.fn_Split(@txtPlages,',')
    Je viens de lire que la variable de type Table serai dispo en SQL Server 2008. J'en déduis que ce code est faut.

    Étant donné que je dois utiliser la table avec un cursor (ou un CTE mais je ne le maîtrise pas bien) j'aimerais savoir comment je dois adresser la table qui est le résultat du split.

    Faut-il utiliser une table temporaire ?

    Un peu d'aide serait la bienvenue...

    D'avance merci

    Laurent

  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 990
    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 990
    Billets dans le blog
    6
    Par défaut
    le type table n'a rien à voir avec le concept de variable de table qui existe dans SQL server depuis la version 2000.
    Un type table est un type d'objet de table permettant d'instancier ou d'hériter un autre objet.

    Extrait de mon bouquin sur SQL co écrit avec C. Soutou :

    "
    2.5.5 Type TABLE ou table objet

    Il est possible de créer une table à partir d'un type utilisateur. En fait, plutôt que de parler d'un type TABLE, on devrait parler de table "type" (un modèle de table), ou encore de table objet, car elle est définie à partir d'un type abstrait.

    Un exemple va permettre de mieux comprendre l'utilité de ce type et sa syntaxe.

    Supposons que nous voulons créer un type disque (contenant des chansons)
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TYPE DISQUE
    AS (titre VARCHAR(256),
        date_creation DATE,
        nombre_plage INTEGER)
    INSTANTIABLE
    NOT FINAL
    REF IS SYSTEM GENERATED
    Comme ce type va servir à générer des sous type, il est indispensable de préciser comment la référence à une ligne de ce type est générée. Ici c'est le SGBDR qui s'occupe de générer la valeur de référence, le "pointeur" en quelques sorte (REF IS SYSTEM GENERATED).

    A partir de ce type nous pouvons créer le type CD :
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TYPE CD UNDER DISQUE
    AS (editeur VARCHAR(32),
        numero_serie CHAR(16)))
    INSTANTIABLE
    NOT FINAL

    Dès lors notre CD comporte 5 colonnes : celles du disque et celles propre au CD.
    Maintenant, voyons comment créer des tables à partir de ces types :
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE T_CD OF CD
    (REF IS CD_ID SYSTEM_GENERATED)

    Notez le mot clef OF qui permet à partir d'un type d'instancier une table.
    Le mécanisme de référence permet de créer une colonne particulière dont la valeur "transparente" est unique et peut servir de référence à la manière d'un pointeur. Dans le présent cas, la colonne CD_ID de type REF possède une valeur générée par le SGBDR...

    Créons maintenant une table permettant de spécifier des CD "courts" (des "single" comportant généralement deux titres !) :
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE T_SINGLE_CD OF CD
    UNDER T_CD
    ( nombre_plage WITH OPTIONS
      CONSTRAINT pas_plus_de_deux_titres CHECK (nombre_plage <= 2 ))
    Cette nouvelle table emprunte sa structure à la table T_CD depuis le type CD et ajoute une contrainte à la colonne nombre_plage.

    T_CD est une table "type". Notons qu'à ce stade une table "type" ne peut qu'être ancêtre, jamais sous table et doit toujours comporter une déclaration de référence.

    "

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/06/2008, 09h53
  2. [SQL Server 2005 Express] Comment lister les tables SQL ?
    Par kinsoi117 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/11/2007, 11h47
  3. [VB 2005 express] Afficher un champ d'une table Access 2007
    Par Xsara 167 cv dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/03/2007, 13h16
  4. [IDE] Visual Studio 2005 Express
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 130
    Dernier message: 23/12/2006, 15h08

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