Petite astuce aujourd’hui, si vous utilisez des requêtes Like et que vous avez un underscore dans le terme recherché.
Mettre un undescore dans une recherche signifie :
“Toutes chaines comportant à cet endroit là, n’importe quel caractères”
Ce qui donne :
Notez que j’ai toutes les lignes contenant 79 “quelque chose” (79_3 mais aussi 790_2, 791_2 etc….)
Hors dans mon cas, je souhaite que mon “_” soit pris non pas comme un caractère spécial, mais comme un un “simple” caractère.
A ce moment là, remplacez le “_” par “[_]” ![]()
Et voilà je n’ai plus que 4 lignes !
Autre méthode : Utilisez le mot clé ESCAPE qui va spécifier que le caractère après celui désigné comme ESCAPE, ne doit pas être pris en compte comme un caractère spécial :
Et voilou,
/LIKE ! ![]()
Bonjour à tous;
Les journées SQL SERVER 2012, qui ont eu lieu dans les locaux de Microsoft à PARIS, sont terminés et l’ensemble des webcasts des sessions sont en ligne.
Malheureusement, comme dans tout monde non parfait, les webcasts n’ont pas TOUS été bien catégorisés sur le site ShowCase Microsoft. Ok, Evidemment la mienne est perdue dans une catégorie où elle n’a rien à faire bien sûr ![]()
Bref…
Si vous voulez voir TOUTES les vidéos de la journée SQL SERVER, le mieux est de directement faire une recherche sur les mots clé “Journées Sql Server”.
Voici le lien direct de l’ensemble des vidéos : http://www.microsoft.com/fr-fr/showcase/Search.aspx?phrase=journ%c3%a9es+sql+server
Voici le lien direct de ma vidéo : http://www.microsoft.com/fr-fr/showcase/details.aspx?uuid=9a331e1f-4ab8-4e6d-82e6-2790debac36e
Et pour les pressés, la vidéo directement
:
Voilà bon visionnage !!
Les inscriptions sont ouvertes aux Journées SQL Server 2012 (édition 2011, ok je vous l’accorde !)

Rejoignez la communauté des professionnels SQL Server !
Les experts francophones de SQL Server, les MVP (Most Valuable Professionnal) et les MCM (Microsoft Certified Master) se réunissent à Paris pour 2 jours de conférences entièrement gratuits.
Vous pourrez découvrir les nouvelles fonctionnalités de SQL Server 2012 mais aussi assister à des sessions sur des sujets pointus au travers d’un parcours consacré au moteur de base de données, d’un autre consacré à la Business Intelligence et enfin un parcours dédié aux appliances SQL Server.
Au total, ce ne sont pas moins de 23 sessions qui vous attendent sur AlwaysOn, Power View, SSIS Server, les index colonnes, SQL Server Data Tools, SQL Azure, BISM, les performances, la sécurité, etc.
Cet événement est organisé par la communauté SQL : le groupe des utilisateurs francophones (GUSS) et les MVP, avec l’appui et la participation de Microsoft et du sponsor Platinum : HP
Tout au long des journées, vous pourrez également poser toutes vos questions à l’espace rencontre à nos différents sponsors éditeurs, presse ou SSII. Les speakers sont également à votre disposition.
Cet événement aura lieu les
12 et 13 décembre
au
Centre de conférences Microsoft
41 quai du Président Roosevelt
Issy-les-Moulineaux
GUSS est affilié au PASS (Professional Association for SQL Server), leader des communautés SQL Server à travers le monde. Nous les remercions pour leur soutien dans l’organisation de cet événement.
J’ai récemment eu un exercice à effectuer sur la machine d’un collègue
“J’ai un backup, mais je n’ai que visual studio installé, pas de Sql Server Management Studio ni rien et faut restorer la base de données”
Ok, donc :
- Pas de SSMS c’est noté
- Obligation de faire un MOVE des fichiers du backup
- Pas de connaissance des fichiers logiques contenus dans le backup
Pour lancer la restauration, il me faut pouvoir exécuter du script SQL. Je décide donc de partir sur du SqlCMD
Il me faut connaitre la liste des fichiers à restaurer contenus dans le backup :
1: restore filelistonly from disk = 'C:\tmp\AdventureWorks2008R2.bak'
Ce qui donne en sqlcmd ![]()
Bien maintenant que j’ai récupéré les fichiers logiques, y’a plus qu’à éxécuter la phase de restauration:
1: RESTORE DATABASE [AdventureWorks2008R2]
2: FROM DISK = N'C:\Tmp\AdventureWorks2008R2.bak' WITH FILE = 1,
3: MOVE N'AdventureWorks2008R2_Data' TO N'C:\DATA\AdventureWorks2008R2_Data.mdf',
4: MOVE N'AdventureWorks2008R2_Log' TO N'C:\DATA\AdventureWorks2008R2_Log.ldf',
5: MOVE N'FileStreamDocuments2008R2' TO N'C:\DATA\Documents2008R2'
6: GO
Et ce qui donne en SQL CMD :
Et voilà une base restaurée convenablement ![]()
Il existe pas mal d’articles sur le nouveau type CLR HierarchyID. Voici quelques pointeurs d’ailleurs :
- http://msdn.microsoft.com/fr-fr/library/bb677290.aspx
- http://www.techheadbrothers.com/Articles.aspx/type-hierarchyid-sql-server-2008
- http://www.scribd.com/doc/43289630/Le-Type-Hierarchy-Id
Par contre, il y a peu d’informations sur la façon de faire pour migrer une table contenant par exemple un Identifiant et son parent (EmployeeID et ManagerID) vers une table supportant un type HierarchyID.
J’ai trouvé quelques essais, qui se sont trouvés être … faux (c’est balot !!)
Le principe finalement, c’est de “construire” Le hierarchyID à partir des données de la table d’origine.
On va éviter de passer par des curseurs, trop lent, et on va utiliser 2 choses:
- Le Row_Number() qui va nous être utile pour numéroter chaque filleul d’un manager : Supposons que j’ai un manager avec 4 filleuls, je veux que chaque filleul soit noté de 1 à 4
- Deux CTE : la première va nous permettre de faire le calcul précédent. La deuxième va créer le hierarchyID pour chaque employé (recursivement) grace aux informations de la première
Du coup on est capable de générer un hierarchyID (correct cette fois ci
) avec … une seule requete :
1: USE AdventureWorks
2:
3: -- Construction d'une table temporarire permettant de
4: -- connaitre le numéro de chaque enfant d'un manager
5: -- Pour un managerID = 3, on voit qu'il y a 7 enfants par exemple,
6: -- numéroté de 1 à 7
7: WITH employees (EmployeeID, ManagerID, Num) AS
8: (
9: SELECT
10: EmployeeID,
11: ManagerID,
12: ROW_NUMBER() OVER
13: (PARTITION BY ManagerID ORDER BY ManagerID)
14: FROM HumanResources.Employee
15: ),
16: hierarchies(orgnode, EmployeeID)
17: AS (
18: -- Récupération des managers de plus haut
19: -- niveau (managerId == null)
20: SELECT hierarchyid::GetRoot() AS OrgNode, EmployeeID
21: FROM employees AS C
22: WHERE ManagerID IS NULL
23: UNION ALL
24: -- Récursivité sur l'ensemble des filleuls
25: SELECT
26: -- Construction du hierarchyId
27: -- On est au niveau inférieur, donc :
28: -- Concaténation du orgnode du parent
29: -- + numéro de l'enfant actuel
30: CAST(p.orgnode.ToString() +
31: CAST(C.Num AS varchar(30)) + '/' AS hierarchyid),
32: C.EmployeeID
33: FROM employees AS C
34: JOIN hierarchies AS p ON C.ManagerID = P.EmployeeID
35: )
36: -- Le select pour vérifier le résultat
37: -- qui pourrait servir à faire un insert ou update
38: -- de la table de destination
39: SELECT orgnode.ToString(), * FROM hierarchies
Il y’a déjà pas mal de développeurs (moi le premier) qui se sont empressés de commencer à développer en WinRT des applications Metro destinés à Windows 8
Pour certains, don’t je fais parti, l’utilisation du pattern MVVM est un plus, une philosophie, une habitude, bref un “must have coding pattern” ![]()
Pour faire du MVVM, j’utilise suivant les projets soit PRISM soit MVVM light Toolkit
En WinRT, aucun portage n’a encore était réalisé de ces 2 frameworks.
Je vous propose donc en téléchargement une version de MVVM Light, migrée vers vers WIN RT, utilisable en C#
Vous pouvez le télécharger ici : http://www.dotmim.com/SiteFiles/GalaSoft.MvvmLight.zip

Biensur je vous recommande de surveiller le portage qui sera suremment développé par Laurent Bugnon, auteur et créateur de MVVM Light.

En attendant cette nouvelle version, celle ci pourra toujours vous servir
(Note : Code fournit “AS IS”, sans AUCUNE garantie !!!
)
Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :
Une différence de technique pour télécharger un élément (nous prendrons ici une image par exemple)
Dans le cas de WP7, nous utliserons la classe WebClient, et l’appellerons de manière asynchrone (on a pas le choix) et du coté WinRT, on utilisera le nouveau mot clé “async” et “wait”
WP7 :
public void GetImage(Uri url)
{
var webClient = new WebClient();webClient.OpenReadCompleted += WebClientOpenReadCompleted;
webClient.OpenReadAsync(url);
}void WebClientOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error != null)
return;BitmapImage bi = new BitmapImage();
bi.SetSource(e.Result);image1.Source = bi;
}
WinRT :
public async void GetImage(Uri url)
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(url);
byte[] img = response.Content.ReadAsByteArray();
InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream();
DataWriter writer = new DataWriter(stream.GetOutputStreamAt(0));
writer.WriteBytes(img);
await writer.StoreAsync();
BitmapImage bi = new BitmapImage();
bi.SetSource(randomAccessStream);image1.Source = bi;
}
Autant je trouve sexy l’utilisation des nouvelles directives d’asynchronisme, autant l’utilisation de IMemoryRandomAccessStream et d’un DataWriter, ben… bof hein ![]()
Bon Downloading !
Dans la série des Posts “Comparons WPF, Silverlight et WinRT” :
Si vous devez déclarer des namespaces en WinRT, sachez que la syntaxe change (heuresement que Visual Studio aide !)
WPF :
xmlns:conv= »clr-namespace:TimeTrack.Converters »
xmlns:mess= »clr-namespace:Bewise.Phone;assembly=Bewise.Phone »
WinRT :
xmlns:conv= »using:TimeTrack.Converters »
xmlns:mess= »using:Bewise.Phone »
Deux remarques:
- Remplacement de clr-namespace par using
- Plus d’obligation d’utiliser le nom de l’assembly si vous référencez un namespace provenant d’une autre assembly
To be continued ! ![]()
Si vous faites du MVVM, et que vous tentez une migration vers WinRT, attention à l’implémentation de INotifyPropertyChanged
La subtilité vient de l’apparition de cette interface dans un autre namespace, lié à l’UI :
Windows.UI.Xaml.Data.INotifyPropertyChanged
D’ailleurs, on le remarque vite, lors de l’ajout du using :

Si vous migrez du code, et que votre INotifyPropertyChanged est encore celui de System.ComponentModel, et bien aucun de vos contrôles XAML ne s’abonnera à cet évènement de votre ViewModel !
Keep The Fight ! ![]()

