none
pipelining en SQL server RRS feed

  • Question

  • Bonjour,
    dans le cadres de mes recherche, j'implemente une extention de l'algèbre relationnelle (nested algébra). cette extension consiste à développer deux nouveux opérateurs qui sappellent Nest et Unest et s'appliquent sur des relations "atypiques "  : formée par des attributs de type atomique et d'autres de type complexe: ensemble de valeurs (class User Defined Type en .NET ).


    pour plus d'information sur le nested algebra voir l'article  http://portal.acm.org/citation.cfm?id=50230&dl=GUIDE&dl=ACM

    je voudrais ajouter de nouveaux opérateurs Nest et Unest sur ces relations atypiques. pour de soucis de performance, je voudrais le faire avec un pipeline

    ma question est la suivante : comment ajouter des opérateurs dans sqlserver interfacé par un pipeline ?


    j'ai la version sqlserver developer edition 2005 et OS windows XP



    dimanche 6 juillet 2008 12:21

Réponses

  • et bah j'ai trouvé une solution ... c'est l'impémenté sous forme d'une procedure stockée et un pipe qui renvoie des ligne, et la je répond aussi à la question suivante "question sur l'attribut TableDefinition d'un user defined table valued function "

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using Microsoft.SqlServer.Server;


    public partial class StoredProcedures
    {

    [Microsoft.SqlServer.Server.SqlProcedure]
        public static void StoredProcReturnResultSet()
        {
            // Create the record and specify the metadata for the columns.
            int n = 3;
            SqlMetaData[] sqlMetaData = new SqlMetaDataNo;
            for(int i = 0 ; i<n; i++){
                sqlMetaDataIdea = new SqlMetaData("Column"+n.ToString(), SqlDbType.NVarChar, 100);
            }

            SqlDataRecord record = new SqlDataRecord(sqlMetaData);  

            // Mark the begining of the result-set.
            SqlContext.Pipe.SendResultsStart(record);

            // Send 10 rows back to the client.
            for (int i = 0; i < 100000; i++)
            {
                // Set values for each column in the row.
                record.SetString(0, "row " + i.ToString());
                record.SetString(1, i.ToString());
                record.SetString(2, "toto"+i.ToString());

                // Send the row back to the client.
                SqlContext.Pipe.SendResultsRow(record);
            }

            // Mark the end of the result-set.
            SqlContext.Pipe.SendResultsEnd();
        }

    }


    mais je ne sais pas encore commen le faire avec une fonction table
    lundi 7 juillet 2008 12:23