Tout et n'importe quoi ...(de préférence)

Blog de CLT-Services : vie de l'entreprise et infos pratiques

Sql Serveur 2005 UDF pour vérifier le numéro SIRET

Thursday, 13 August 2009 09:57 by adrian

Le numéro SIRET intègre le mécanisme de contrôle de parité connu sous le nom de formule (ou clé) de Luhn. Ce contrôle de parité peut être utilisé pour réduire les risques d'erreurs de frappe ou de transmission. L'algorithme consiste à parcourir les chiffres constituant le numéro SIREN, NIC ou SIRET, à multiplier par 2 les chiffres de rang impair et à faire ensuite la somme de tous les chiffres obtenus. Attention, il s'agit bien de faire la somme des chiffres obtenus : si après multiplication par 2 d'un des chiffres du numéro on obtient "12", il faudra ajouter les chiffres 1 puis 2 et non le nombre 12 (ou Somme-9 implémenté ci-dessous). Le contrôle de parité est correct si le résultat obtenu est un multiple de 10.

Ci-dessous une fonction Sql Serveur qui implémente cet algorithme :

 

create function dbo.Siret_ok(@siret varchar(24))

       returns bit

as

begin

        declare @Position tinyint

        declare @tmp int

        declare @Cumul_Siret int

        declare @Siret_valide bit

        set @Siret_valide = 0;

        set @Cumul_Siret = 1;

        If Len(@Siret)=14

        begin

             set @Cumul_Siret = 0;

             set @position=1

             while @position<=14

             begin

                    if @position % 2 = 0

                    begin

                           set @tmp = cast(substring(@siret,@position,1) as int);

                    end

                    else

                    begin

                           set @tmp = cast(substring(@siret,@position,1) as int) * 2;

                           if (@tmp > 9)

                           begin

                                  set @tmp = @tmp - 9;

                           end

                    end

                    set @Cumul_Siret = @Cumul_Siret + @tmp;

                    set @position=@position+1

             end

             set @Siret_valide=(case when @Cumul_Siret % 10 = 0 then 1 else 0 end);

       end   

       return (@Siret_valide)    

end

go

 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:   ,
Categories:   SQL Server
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Sql Server 2005 - Sélectionner la n-ème valeur de chaque élément d'un groupe

Tuesday, 16 June 2009 18:44 by adrian

Un de ces jours, je me suis retrouvé à oprimiser une procédure stockée qui traitait à travers un courseur une table de quelques millions d'enregistrements. Le traitement consistait à faire une mise à jour de chaque dernière enregistrement d'un regroupement de données.

Pour réaliser l'optimisation la première étape était d'obtenir la liste des enregistremens à mettre à jour (Ex : sur AdventureWorks) :

    SELECT * FROM
        (SELECT Sale.CustomerID, Cust.LastName, Sale.SalesOrderID, Sale.OrderDate,
            ROW_NUMBER() OVER (partition by CustomerID order by OrderDate desc)as RowNumber
            FROM Sales.SalesOrderHeader Sale
            inner join Sales.Customer Cust on Cust.CustomerID=Sale.CustomerID) t2
    WHERE RowNumber=1

En passant par ROW_NUMBER avec partitionnement tout devient plus simple.

Et maintenant on peut éliminer le courseur et utiliser une mise à jour en join:

update Sales.SalesOrderHeader
    set DueDate=getdate()
from
    Sales.SalesOrderHeader s1 inner join
(
    SELECT * FROM
        (SELECT Sale.CustomerID, Cust.LastName, Sale.SalesOrderID, Sale.OrderDate,
            ROW_NUMBER() OVER (partition by CustomerID order by OrderDate desc)as RowNumber
            FROM Sales.SalesOrderHeader Sale
            inner join Sales.Customer Cust on Cust.CustomerID=Sale.CustomerID) t2
    WHERE RowNumber=1
) t1 on t1.SalesOrderID=s1.SalesOrderID

La procédure est valable pour retrouver et mettre à jour le 2-ème,..., n-ème élément. 

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:  
Categories:   SQL Server
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Sql Serveur 2005 - Group by avec concaténation

Friday, 17 April 2009 12:39 by adrian

Dans les versions antèrieures de Sql Serveur 2005 pour réaliser un group by avec concaténation on devait toujours passer par une fonction ou un courseur.

Avec la version 2005 et SELECT ... FOR XML PATH('') on obtient :

use AdventureWorks

go 

select Cust.CustomerID,
 IsNull(stuff( ( select cast(SalesOrderID as varchar(100)) + ','
 from Sales.SalesOrderHeader OrderHeader
 where OrderHeader.CustomerID=Cust.CustomerID
 for xml path('')),1,1,''),'') Sales
from Sales.Customer Cust
group by Cust.CustomerID
order by Cust.CustomerID

L'éxemple va concaténer toutes les Id-s des ventes par CustomerId.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:   , ,
Categories:   SQL Server
Actions:   E-mail | Permalink | Comments (2) | Comment RSSRSS comment feed

Changer la langue par défaut du toolbar pour le composant ReportViewer

Tuesday, 4 November 2008 18:23 by adrian

Après avoir passé du temps à chercher une solution pour changer la langue d'affichage du toolbar du ReportViewer control en ASP.Net, j'ai trouvé la solution qui était trop simple pour y penser. More...

Be the first to rate this post

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

Désactivation de l'héritage du fichier web.config

Tuesday, 4 November 2008 09:57 by adrian

En essayant de déployer Reporting Services comme sous-site d'un site existant, j'ai constaté que le site de Reporting Services, même s'il a son propre web.config charge aussi le web.config du site racine (root). En faite, tous les sous-sites héritent du web.config du site racine.

En cherchant une solution je suis tombé sur le lien ci-dessous : 

http://www.aspdotnetfaq.com/Faq/how-to-disable-web-config-inheritance-for-child-applications-in-subfolders-in-asp-net.aspx

La solution est assez simple. Dans le web.config du site racine il faut imbriquer les balises <system.web> entre des balises <location> avec l'attribut inheritInChildApplications="false" :  

  <location path="." inheritInChildApplications="false">   

    <system.web>
    ...

    </system.web>  
  </location>

 

Dans ces conditions pour chaque sous-site vous devez redéclarer toutes les propriétés de <system.web> dont vous aurez besoin.

 

Be the first to rate this post

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

Supprimer des verrous (lock) actifs d'une base de données Sql Serveur

Wednesday, 22 October 2008 16:24 by adrian

Souvent quand on essaye de restaurer une base de données, on se retrouve dans la situation où le serveur refuse la restauration parce qu'on a encore de transactions en attente. Même s'il ne s'agit pas de vrai transactions de mise à jour de base. Dans ces cas il faut aller rechercher les verrous et les supprimer un à un. Ca marche si on fait manuellement ce travail.

Mais qu'est ce qui ce passe si on a un serveur de tests qu'on a besoin de raffraichir automatiquement tout les jours avec une sauvegarde base de production ? On peut restaurer manuellement s'il y a des erreurs suite à la restauration. Mieux, on peut rajouter dans le script de restauration avant la restauration effective une suppression des verrous. More...

Be the first to rate this post

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

Changer la langue par défaut de Sql Serveur

Monday, 6 October 2008 17:06 by adrian

Les exemples qui suivent configurent le serveur de données en français. Pour d'autres langues merci de regarder dans le BOL. 

Au départ pour vérifier la langue configurée : 
select @@Language, @@Langid 

Pour changer la langue par défaut du serveur Sql Serveur :
exec sp_configure 'default language',2
go
RECONFIGURE WITH OVERRIDE
go 

La procédure ci-dessus ne configure pas les logins déjà créés. Donc, pour finaliser l'opération vous pouvez executer le code suivant dans l'annalyseur de requêtes (une autre solution c'est d'utiliser Sql Server Management Studio) : More...

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:   ,
Categories:   SQL Server
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Télécharger la base Northwind

Friday, 3 October 2008 16:47 by damien

Si, comme moi, vous voulez modifier les tests unitaire de SubSonic vous aurez besoin d'une base Northwind. Or celle-ci n'est plus livrée avec SQL Server 2005 ou 2008.

Heureusement, les bases exemples (Northwind, Pubs mais aussi AdventureWorks ) sont téléchargeables sur Codeplex. More...

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:  
Categories:   SQL Server
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

SQL Server : qui utilise cette table ?

Monday, 1 September 2008 17:51 by damien

Pour mettre à jour une base dans laquelle de nombreuses personnes sont intervenues, je me suis retrouvé à chercher quels objets utilisent la colonne que je veux modifier. Quelques requêtes de schéma très simples permettent d'avoir facilement l'info. More...

Be the first to rate this post

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

Upserts avec SSIS

Wednesday, 20 February 2008 13:56 by celine

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
Tags:   , ,
Categories:   SQL Server
Actions:   E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed

Search