Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Integration services (SSIS) et les Primary key ( foreign key aussi

2 réponses
Avatar
PGN
Par programmation je développe un système qui peut prendre plusieurs sources
de données et qui importe les données dans un datareader (plus tard dans un
dataset avec un composant personnalisé).

Dans le cas d'une source OleDb par exemple, après avoir défini la source, la
destination, le path je défini le mappage par une fonction du style (voir à
la fin) qui permet d'itérer toutes les colonnes. Or dans je ne vois pas
comment déceler quelles sont les colonnes de la clé primaire.

Est ce quelqu'un a une idée pour déceler la clé primaire (ou étrangère) dans
un composant DataFlow ? (sans utiliser SMO, car on ne connecte pas forcément
qu' à Sqlserver)
Merci
Patrick
---------------------------------------------------------------------------------
Code exemple
---------------------------------------------------------------------------------

public void MapInputColumns(IDTSComponentMetaData90 componentMetaData)
{
/// Get the design time instance of the component.
CManagedComponentWrapper designTimeComponent =
componentMetaData.Instantiate();
// Iterate through the inputs of the component.
foreach (IDTSInput90 input in componentMetaData.InputCollection)
{
// Get the virtual input column collection for the input.
IDTSVirtualInput90 vInput = input.GetVirtualInput();

foreach (IDTSVirtualInputColumn90 vColumn in
vInput.VirtualInputColumnCollection)
{
IDTSInputColumn90 col =
designTimeComponent.SetUsageType(input.ID, vInput, vColumn.LineageID,
DTSUsageType.UT_READONLY);
}
}

// col : contient toute les propriétés de la colonne sauf si c'est une clé !

2 réponses

Avatar
Med Bouchenafa
Difficile de dire pourquoi les developpeurs d'une source de donnees "Data
Flow" n'ont pas inclu la possibilite d'avoir aussi le schema de la source de
donnees.
Par contre, pour ce qui est de rattacher la propriete "Primary Key" a une
colonne, cela est tout a fait normal que cela ne soit pas fait
"Primary Key" est une contrainte de la table et pas de la colonne. La
preuve, une clef primaire peut s'etendre sur plusieurs colonnes

--
Bien cordialement
Med Bouchenafa


"PGN" wrote in message
news:
Par programmation je développe un système qui peut prendre plusieurs
sources
de données et qui importe les données dans un datareader (plus tard dans
un
dataset avec un composant personnalisé).

Dans le cas d'une source OleDb par exemple, après avoir défini la source,
la
destination, le path je défini le mappage par une fonction du style (voir
à
la fin) qui permet d'itérer toutes les colonnes. Or dans je ne vois pas
comment déceler quelles sont les colonnes de la clé primaire.

Est ce quelqu'un a une idée pour déceler la clé primaire (ou étrangère)
dans
un composant DataFlow ? (sans utiliser SMO, car on ne connecte pas
forcément
qu' à Sqlserver)
Merci
Patrick
---------------------------------------------------------------------------------
Code exemple
---------------------------------------------------------------------------------

public void MapInputColumns(IDTSComponentMetaData90
componentMetaData)
{
/// Get the design time instance of the component.
CManagedComponentWrapper designTimeComponent > componentMetaData.Instantiate();
// Iterate through the inputs of the component.
foreach (IDTSInput90 input in
componentMetaData.InputCollection)
{
// Get the virtual input column collection for the input.
IDTSVirtualInput90 vInput = input.GetVirtualInput();

foreach (IDTSVirtualInputColumn90 vColumn in
vInput.VirtualInputColumnCollection)
{
IDTSInputColumn90 col > designTimeComponent.SetUsageType(input.ID, vInput, vColumn.LineageID,
DTSUsageType.UT_READONLY);
}
}

// col : contient toute les propriétés de la colonne sauf si c'est une clé
!



Avatar
PGN
Merci de la réponse, Oui je suis d'accord sur le fait que c'est une
contrainte qui peut être répartie sur plusieurs colonnes, les développeurs
auraient pu ajouter une collection de champs participant à la clé, bon bref
c'est pas fait. La solution que je vois c'est d'agir au niveau de la
connexion pour obtenir le schèma si il est disponible et supporté par le
provider.
Cordialement,
Patrick

"Med Bouchenafa" a écrit :

Difficile de dire pourquoi les developpeurs d'une source de donnees "Data
Flow" n'ont pas inclu la possibilite d'avoir aussi le schema de la source de
donnees.
Par contre, pour ce qui est de rattacher la propriete "Primary Key" a une
colonne, cela est tout a fait normal que cela ne soit pas fait
"Primary Key" est une contrainte de la table et pas de la colonne. La
preuve, une clef primaire peut s'etendre sur plusieurs colonnes

--
Bien cordialement
Med Bouchenafa


"PGN" wrote in message
news:
> Par programmation je développe un système qui peut prendre plusieurs
> sources
> de données et qui importe les données dans un datareader (plus tard dans
> un
> dataset avec un composant personnalisé).
>
> Dans le cas d'une source OleDb par exemple, après avoir défini la source,
> la
> destination, le path je défini le mappage par une fonction du style (voir
> à
> la fin) qui permet d'itérer toutes les colonnes. Or dans je ne vois pas
> comment déceler quelles sont les colonnes de la clé primaire.
>
> Est ce quelqu'un a une idée pour déceler la clé primaire (ou étrangère)
> dans
> un composant DataFlow ? (sans utiliser SMO, car on ne connecte pas
> forcément
> qu' à Sqlserver)
> Merci
> Patrick
> ---------------------------------------------------------------------------------
> Code exemple
> ---------------------------------------------------------------------------------
>
> public void MapInputColumns(IDTSComponentMetaData90
> componentMetaData)
> {
> /// Get the design time instance of the component.
> CManagedComponentWrapper designTimeComponent > > componentMetaData.Instantiate();
> // Iterate through the inputs of the component.
> foreach (IDTSInput90 input in
> componentMetaData.InputCollection)
> {
> // Get the virtual input column collection for the input.
> IDTSVirtualInput90 vInput = input.GetVirtualInput();
>
> foreach (IDTSVirtualInputColumn90 vColumn in
> vInput.VirtualInputColumnCollection)
> {
> IDTSInputColumn90 col > > designTimeComponent.SetUsageType(input.ID, vInput, vColumn.LineageID,
> DTSUsageType.UT_READONLY);
> }
> }
>
> // col : contient toute les propriétés de la colonne sauf si c'est une clé
> !
>