Upserts avec SSIS

Voici une petite astuce afin de réaliser des UPSERTS avec SSIS. Un UPSERT consiste à mettre à jour une donnée si elle existe dans la table, ou le cas échéant, à l’insérer (update or insert). Une méthode simple et efficace consiste à utiliser le composant ‘Look up’. More...

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

SSIS : Comment empêcher la reconnaissance automatique du type des données avec une source de données Excel

Lorsque l’on veut importer des données à partir d’un fichier Excel, SSIS se base par défaut sur les 8 premières colonnes afin de déterminer le type de données à importer.

Prenons par exemple un fichier Excel  contenant une colonne avec des données alphanumériques dont les 8 premières colonnes sont des entiers, on rencontre alors le problème suivant: lorsque que l'on fait un aperçu dans l' Exel DataSource, les entiers sont conservés et les chaînes sont remplacées par des 'NULL' : More...

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Sortie de MS SQL 2008 repoussée à l'été

D'après une de mes sources chez Microsoft, la sortie de la nouvelle version de SQL Server (MS-SQL 2008), prévue pour le début d'année, pourrait être reportée à Juin ou Juillet pour intégrer les remontées des partenaires et bêta testeurs.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Quelle valeur pour la suite décisionnelle de Microsoft (SQL Server 2005)

A deux jours de faire une présentation sur l'offre BI de SQL Server 2005, je tombe sur une transcription d'un chat organisé par le journal du net autour d'Yves Cointrelles (Homsys), qui anime les séminaires Benchmark group sur l'état de l'art du décisionnel. J'ai déjà eu l'occasion d'assister à une présentation de M. Cointrelle, et c'est un intervenant très pro et très agréable. More...

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tache de script en C# dans SSIS

... mais il faudra encore patienter un peu. Ca n'est toujours pas dispo sous 2005 mais la beta de SQL Server 2008 propose bien le choix du langage pour les tâches de script.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Analyse des logs SQL Server 2005

Vous avez peut être déjà utilisé Read80Trace qui retraite les fichiers trace de SQL Server 2000, et vous avez sans doute noté qu'il ne fonctionne pas pour SQL 2005. Une petite société de consultants américains s'est lancé dans le développement d'une version graphique pour SQL 2005 : ClearTrace

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Déconnecter tous les utilisateurs d'une base

Avez-vous essayé de détacher une base sur laquelle il reste des sessions ouvertes ? Sous SQL Server 2000 on avait la possibilité de fermer les sessions. Maintenant (sous SQL Server 2005) il faut aller dans le moniteur et les tuer un par un. Comme je suis un gros flemmard, je me suis écrit une petite procédure stockées pour faire le travail toute seule. More...

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Fonction IsNull2

Vous avez peut-être déjà rencontré ce besoin en Transac-SQL : renvoyer une valeur si un champ est null ou une autre s'il n'est pas vide ? Moi oui, et je ne suis pas le seul. Leo Vildosola propose une fonction T-SQL qu'il a judicieusement nommée IsNull2  qui fait exactement ça.

http://lvildosola.blogspot.com/2007/01/sql-equivalent-to-nvl2.html

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Fonctions de catalogue SQL

Dans la boite à outil SQL Server, deux fonctions pour, respectivement, lister les tables et vue et leur colonnes

if exists(select * from sysobjects where name=N'TablesEtVues' and type='IF')

  drop function TablesEtVues

go

 

create function TablesEtVues() returns TABLE

as

RETURN(

  select

    o.name,

    case o.type

      when 'U' then 'Table'

        when 'V' then 'Vue'

      when 'IF' then 'Fonction de sélection'

    end as 'type',

    o.id

  from sysobjects o where o.type in ('U', 'V', 'IF') and o.status>0

)

go

 

if exists(select * from sysobjects where name=N'ColonnesDeTable' and type='IF')

  drop function ColonnesDeTable

go

 

create function ColonnesDeTable(@TableName varchar(50)) returns TABLE

as

RETURN(

  select c.colid colid, c.name colname, t.name typename, c.length length, c.xprec prec, c.xscale scale

  from syscolumns c

  inner join sysobjects o on c.id = o.id

  left join systypes t on t.xtype=c.xtype and t.usertype=c.usertype

  where o.type in ('S', 'U', 'V', 'IF') and o.name=@TableName

)

go

 

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Exemple de trigger instead-of delete

SQL Server supporte les cascade delete sur les contraintes foreign key mais n'accepete pas qu'une même table soit la cible de plusieurs cascades. C'est pourtant pratique, lorsque l'on a une table de relation entre deux entités, de savoir que la relation est supprimée automatiquement lorsque n'importe laquelle des deux lignes de référence est supprimée. La solution c'est de recourir à un trigger instead of delete sur les tables de référence pour faire la cascade à la main.

Voici un petit exemple de trigger instead-of delete dans un classique des situations problématiques qui conduisent à interdir les cascades : une référence en diamant où la table D référence les tables B et C qui ont toutes les deux des références sur A, avec descente dans la clé primaire (!) :
Create table TableA
(idxA numeric identity not null,
labelA varchar(50),
constraint pk_TableA primary key(idxA) )
go

Create table TableB
(idxB numeric identity not null,
idxA numeric,
labelB varchar(50),
constraint pk_TableB primary key(idxB),
constraint fk_TableB_ref_TableA foreign key(idxA) references TableA(idxA) 
)
go

Create table TableC
(idxC numeric identity not null,
idxB numeric,
idxA numeric,
labelC varchar(50),
constraint pk_TableC primary key(idxC),
constraint fk_TableC_ref_TableB foreign key(idxB) references TableB(idxB) on delete cascade,
constraint fk_TableC_ref_TableA foreign key(idxA) references TableA(idxA) )
go

Create table TableD
(idxD numeric identity not null,
idxA numeric,
idxC numeric,
labelD varchar(50),
constraint pk_TableD primary key(idxD),
constraint fk_TableD_ref_TableA foreign key(idxA) references TableA(idxA),  
constraint fk_TableD_ref_TableC foreign key(idxC) references TableC(idxC) on delete cascade )
go


CREATE TRIGGER IOD_TableA ON TableA
INSTEAD OF DELETE
AS
BEGIN
  delete TableD from TableD t, deleted d where t.IdxA = d.IdxA
  delete TableC from TableC t, deleted d where t.IdxA = d.IdxA
  delete TableB from TableB t, deleted d where t.IdxA = d.IdxA
  delete TableA from TableA t, deleted d where t.idxA = d.idxA
END
go

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5