<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog SQL d&#039;un développeur Microsoft. &#187; SQL Server 2005</title>
	<atom:link href="https://blog.developpez.com/ylarvor/pcategory/interrogation/sql-server-2005/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/ylarvor</link>
	<description>SQL or No-SQL !</description>
	<lastBuildDate>Sat, 04 Jun 2016 19:39:50 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Quand utilise t&#8217;on du code .NET embarqué dans SQL Server 2005 ?</title>
		<link>https://blog.developpez.com/ylarvor/p6846/programmation/c/etude_de_performance_du_code_net_embarqu_2005</link>
		<comments>https://blog.developpez.com/ylarvor/p6846/programmation/c/etude_de_performance_du_code_net_embarqu_2005#comments</comments>
		<pubDate>Fri, 28 Nov 2008 19:40:02 +0000</pubDate>
		<dc:creator><![CDATA[ylarvor]]></dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[SQL Server 2005]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Comme vous le savez déjà, depuis SQL Server 2005, Microsoft a mis en place l&#8217; utilisation du langage .NET dans SQL Server. Etudions par un simple exemple les performances ? Quand devrons-nous utiliser quand même ce SQLCLR ? 1 Etude des performances. 1.1 Matériel. L&#8217; étude de Rudi Bruchez sur .net avec SQL Server paru [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Comme vous le savez déjà, depuis SQL Server 2005, Microsoft a mis en place l&rsquo; utilisation du langage .NET dans SQL Server. Etudions par un simple exemple les performances ? Quand devrons-nous utiliser quand même ce SQLCLR ?</p>
<p>  <span id="more-28"></span>
<p><strong>1 Etude des performances.</strong></p>
<p><strong>1.1 Matériel.</strong></p>
<p>L&rsquo; étude de Rudi Bruchez sur .net avec SQL Server paru sur Developpez.com.</p>
<p>Un portable moyen de gamme.</p>
<p>Visual Studio 2008 express.</p>
<p>SQL Server 2005 developper.</p>
<p>Une table Arbre[primary key identity, NOM(varchar[25]) contenant 200 000 lignes.</p>
<p><strong>1.2 Requête SQL.</strong></p>
<p>La requête SQL : SELECT NOM FROM Arbre; pour 200 000 lignes Arbre N°Identity.</p>
<p>Durée d&rsquo; exécution sur le manager : 7 secondes. </p>
<p><strong>1.3 Procédure stockée SQL.</strong></p>
<p>CREATE PROCEDURE ListeNomsArbres AS SELECT NOM FROM Arbre;   <br />GO</p>
<p>Durée d&rsquo; exécution sur le manager : 7 secondes.</p>
<p><strong>1.3 Procédure SQLCLR.</strong></p>
<p>La procédure reprend la commande SQL mais l&rsquo; encapsule dans du code .NET chargé dans l&rsquo; SQLOS de Sql Server.</p>
<p>using System.Data;   <br />using System.Data.SqlClient;    <br />using System.Data.SqlTypes;    <br />using Microsoft.SqlServer.Server; </p>
<p>public class StoredProcedures   <br />{    <br />    [Microsoft.SqlServer.Server.SqlProcedure]    <br />    public static void GetArbreFromCTIFL()    <br />    {    <br />        try    <br />        {    <br />            using (SqlConnection cn = new SqlConnection(&laquo;&nbsp;context connection=true&nbsp;&raquo;))    <br />            {    <br />                cn.Open();    <br />                string sql = @&nbsp;&raquo;SELECT NOM    <br />                                FROM ARBRE&nbsp;&raquo;;    <br />                SqlCommand cmd = new SqlCommand(sql, cn);    <br />                SqlContext.Pipe.Send(cmd.ExecuteReader());    <br />            }    <br />        }    <br />        catch (Exception e)    <br />        {    <br />            SqlPipe pipe = SqlContext.Pipe;    <br />            pipe.Send(&laquo;&nbsp;erreur d&rsquo;execution&nbsp;&raquo;);    <br />            pipe.Send(e.Message);    <br />            pipe.Send(e.StackTrace);    <br />        }    <br />    }    <br />}</p>
<p>Après mise en place sur le server suivant les indication de rudib.</p>
<p>L&rsquo; exécution de la procédure prend 17 secondes.</p>
<p><strong>Le temps d&rsquo; exécution est donc bien plus lent, le double.</strong></p>
<p><strong>2 Peux on utiliser le SQLCLR ?</strong></p>
<p>D&rsquo; abord,du point de vue de SQL Server, Il suffit de créer un Assembly pointant sur le répertoire C:\ du serveur et contenant la librairie .net compilée. L&rsquo; Assembly crée, la procédure devient très simple à déclarer.</p>
<p>D&rsquo; après &laquo;&nbsp;Administrating SQL Server&nbsp;&raquo;, le SQLCLR répond à des problématiques de communication de SQL Server avec son environnement non conventionnels ( exemple : mail, sms&#8230; )</p>
<p>Autre cas d&rsquo; usage du SQLCLR, les traitements algorithmiques lourds, portant sur quelques lignes, en mode pas à pas.</p>
<p>Autre cas d&rsquo; utilisation du SQLCLR, le calcul complexe, à partir de données que l&rsquo; on souhaite mettre à disposition dans une procédure stockée.</p>
<p><a href="http://blog.developpez.com/mikedavem/p7285/sql-server-2005/clr/title-123/#more7285" target="new">lien sur un article de mike daven sur le CLR.</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[SQL] Concours SQL Pro &#8211; le publipostage (2 étoiles).</title>
		<link>https://blog.developpez.com/ylarvor/p5651/interrogation/sql-server-2005/sql_concours_sql_pro</link>
		<comments>https://blog.developpez.com/ylarvor/p5651/interrogation/sql-server-2005/sql_concours_sql_pro#comments</comments>
		<pubDate>Thu, 08 May 2008 00:32:31 +0000</pubDate>
		<dc:creator><![CDATA[ylarvor]]></dc:creator>
				<category><![CDATA[Concours_SQL_Pro]]></category>
		<category><![CDATA[SQL Server 2005]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Comme la date des résultats est dépassée et que je pense que le concours reste à titre pédagogique, je me permet de publier quelques résultats qui peuvent vous instruire. Aujourd&#8217;hui, utilisation des CTE pour multiplie une ligne. ( Première Partie ) Problème N°2 Le publipostage. Pour info, j&#8217;ai cherche un moment comment multiplier des données [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Comme la date des résultats est dépassée et que je pense que le concours reste à titre pédagogique, je me permet de publier quelques résultats qui peuvent vous instruire.</p>
<p>Aujourd&rsquo;hui, utilisation des CTE pour multiplie une ligne.</p>
<p><a href="http://sqlpro.developpez.com/Exercices/SQL_AZ_P1.html">( Première Partie ) Problème N°2 Le publipostage.</a> Pour info, j&rsquo;ai cherche un moment comment multiplier des données avant de comprendre que c&rsquo;était les CTE la solution.</p>
<p>Réponse :<br />
<span id="more-53"></span></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">WITH T_PERSONNE_PRS_TEMP(PRS_NOM,PRS_VILLE,PRS_NOMBRE) &nbsp;<br />
AS <br />
&nbsp; &nbsp;(SELECT PRS_NOM,PRS_VILLE,PRS_NOMBRE &nbsp;<br />
&nbsp; &nbsp; FROM &nbsp; T_PERSONNE_PRS <br />
&nbsp; &nbsp; WHERE &nbsp;PRS_NOMBRE &gt; 0 <br />
&nbsp; &nbsp; UNION &nbsp;ALL <br />
&nbsp; &nbsp; SELECT T_PERSONNE_PRS.PRS_NOM,T_PERSONNE_PRS.PRS_VILLE,T_PERSONNE_PRS.PRS_NOMBRE - 1 <br />
&nbsp; &nbsp; FROM &nbsp; T_PERSONNE_PRS &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;INNER JOIN T_PERSONNE_PRS_TEMP &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ON T_PERSONNE_PRS_TEMP.PRS_NOMBRE = T_PERSONNE_PRS.PRS_NOMBRE) <br />
SELECT * <br />
FROM T_PERSONNE_PRS_TEMP ORDER BY PRS_NOM,PRS_VILLE</div></div>
<p>PS : je m&rsquo;en vais sur le champs demander l&rsquo;autorisation de continuer la publication de solutions aux problèmes fournis par sql pro&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FONCTION DE FENETRAGE ET DE RANKING.</title>
		<link>https://blog.developpez.com/ylarvor/p4986/interrogation/sql-server-2005/fonction_de_fenetrage_et_de_ranking</link>
		<comments>https://blog.developpez.com/ylarvor/p4986/interrogation/sql-server-2005/fonction_de_fenetrage_et_de_ranking#comments</comments>
		<pubDate>Mon, 23 Apr 2007 11:00:00 +0000</pubDate>
		<dc:creator><![CDATA[ylarvor]]></dc:creator>
				<category><![CDATA[SQL Server 2005]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Syntaxe : ROW_NUMBER() OVER([PARTITION BY value_expression ] ORDER BY value_expression) Définition : ROW_NUMBER() Retourne le numéro séquentiel d&#8217;une ligne d&#8217;une partition d&#8217;un jeu de résultats, en commençant à 1 pour la première ligne de chaque partition PARTITION BY Divise l&#8217;ensemble de résultats en partitions. La fonction de fenêtre est appliquée à chaque partition séparément et [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Syntaxe :<br />
ROW_NUMBER() OVER([PARTITION BY value_expression ] ORDER BY value_expression)<br />
Définition :<br />
ROW_NUMBER()<br />
Retourne le numéro séquentiel d&rsquo;une ligne d&rsquo;une partition d&rsquo;un jeu de résultats, en commençant à 1 pour la première ligne de chaque partition<br />
PARTITION BY<br />
Divise l&rsquo;ensemble de résultats en partitions. La fonction de fenêtre est appliquée à chaque partition séparément et le calcul redémarre pour chaque partition.<br />
toute l&rsquo;information à l&rsquo;adresse :<br />
http://sqljunkies.com/Article/4E65FA2D-F1FE-4C29-BF4F-543AB384AFBB.scuk</p>
<p>
Un exemple d&rsquo;utilisation :<br />
Fournir les 3 premiers traffic d&rsquo;un identificateur de cellule par semaine.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">CREATE TABLE TRAFFIC_CELLULES(identificateur_de_cellule CHAR(3),traffic INT,date DATETIME); &nbsp;&lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
INSERT INTO TRAFFIC_CELLULES(identificateur_de_cellule,traffic,date) VALUES ('A',100,'01/01/2008') &lt;br /&gt;<br />
INSERT INTO TRAFFIC_CELLULES(identificateur_de_cellule,traffic,date) VALUES ('A',200,'01/01/2008') &lt;br /&gt;<br />
INSERT INTO TRAFFIC_CELLULES(identificateur_de_cellule,traffic,date) VALUES ('A',225,'01/01/2008') &lt;br /&gt;<br />
INSERT INTO TRAFFIC_CELLULES(identificateur_de_cellule,traffic,date) VALUES ('A',400,'01/01/2008') &lt;br /&gt;<br />
INSERT INTO TRAFFIC_CELLULES(identificateur_de_cellule,traffic,date) VALUES ('A',150,'01/02/2008') &lt;br /&gt;<br />
INSERT INTO TRAFFIC_CELLULES(identificateur_de_cellule,traffic,date) VALUES ('A',175,'01/02/2008') &lt;br /&gt;<br />
INSERT INTO TRAFFIC_CELLULES(identificateur_de_cellule,traffic,date) VALUES ('A',200,'01/02/2008') &lt;br /&gt;<br />
INSERT INTO TRAFFIC_CELLULES(identificateur_de_cellule,traffic,date) VALUES ('B',100,'01/01/2008') &lt;br /&gt;<br />
INSERT INTO TRAFFIC_CELLULES(identificateur_de_cellule,traffic,date) VALUES ('B',100,'01/03/2008') &nbsp;&lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
WITH selection &lt;br /&gt;<br />
AS &lt;br /&gt;<br />
( &lt;br /&gt;<br />
SELECT identificateur_de_cellule,traffic,datepart(ww,date) as sem,ROW_NUMBER() OVER (PARTITION BY identificateur_de_cellule,datepart(ww,date) ORDER BY traffic) as OrderRank FROM TRAFFIC_CELLULES &lt;br /&gt;<br />
) &lt;br /&gt;<br />
SELECT * FROM selection where OrderRank &lt;= 3 &lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
Resultat: &lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
A &nbsp; &nbsp; &nbsp;100 &nbsp; &nbsp;1 &nbsp; &nbsp;1 &lt;br /&gt;<br />
A &nbsp; &nbsp; &nbsp;200 &nbsp; &nbsp;1 &nbsp; &nbsp;2 &lt;br /&gt;<br />
A &nbsp; &nbsp; &nbsp;225 &nbsp; &nbsp;1 &nbsp; &nbsp;3 &lt;br /&gt;<br />
A &nbsp; &nbsp; &nbsp;150 &nbsp; &nbsp;5 &nbsp; &nbsp;1 &lt;br /&gt;<br />
A &nbsp; &nbsp; &nbsp;175 &nbsp; &nbsp;5 &nbsp; &nbsp;2 &lt;br /&gt;<br />
A &nbsp; &nbsp; &nbsp;200 &nbsp; &nbsp;5 &nbsp; &nbsp;3 &lt;br /&gt;<br />
B &nbsp; &nbsp; &nbsp;100 &nbsp; &nbsp;1 &nbsp; &nbsp;1 &lt;br /&gt;<br />
B &nbsp; &nbsp; &nbsp;100 &nbsp; &nbsp;9 &nbsp; &nbsp;1</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expression de table courante.</title>
		<link>https://blog.developpez.com/ylarvor/p4970/interrogation/sql-server-2005/expression_de_table_courante</link>
		<comments>https://blog.developpez.com/ylarvor/p4970/interrogation/sql-server-2005/expression_de_table_courante#comments</comments>
		<pubDate>Tue, 08 May 2007 11:00:00 +0000</pubDate>
		<dc:creator><![CDATA[ylarvor]]></dc:creator>
				<category><![CDATA[SQL Server 2005]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Une expression de table courante ( CTE pour common Table Expression ) ressemble beaucoup à une vue non persistante. Syntaxe : WITH nom_CTE ( nom_colonne,&#8230; )AS(requete)SELECT * FROM nom_CTE Exemple de code : WITH selection AS (SELECT identificateur_de_cellule,traffic,datepart(ww,date) as sem,ROW_NUMBER() OVER (PARTITION BY identificateur_de_cellule,datepart(ww,date) ORDER BY traffic) as OrderRank FROM TRAFFIC_CELLULES)SELECT * FROM selection where [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Une expression de table courante ( CTE pour common Table Expression ) ressemble beaucoup à une vue non persistante.</p>
<p>Syntaxe :</p>
<p>WITH nom_CTE ( nom_colonne,&#8230; )<br />AS<br />(<br />requete<br />)<br />SELECT * FROM nom_CTE</p>
<p>Exemple de code :</p>
<p>WITH selection AS (<br />SELECT identificateur_de_cellule,traffic,datepart(ww,date) as sem,ROW_NUMBER() OVER (PARTITION BY identificateur_de_cellule,datepart(ww,date) ORDER BY traffic) as OrderRank FROM TRAFFIC_CELLULES<br />)<br /><code class="codecolorer text default"><span class="text">SELECT * FROM selection where OrderRank &lt; salespersonid='sp.SalesPersonID'</span></code><br />UNION ALL<br />selectionner<br />)<br />SELECT * FROM simpleRecursive</p>
<p>Exemple :</p>
<p>&#8211; Creation d&rsquo;une table avec les données sous forme d&rsquo;arbre<br />CREATE TABLE Employee_Tree( Employee_NM nvarchar(50), employee_ID int Primary Key, reportsTo int )<br />INSERT INTO Employee_Tree VALUES (&lsquo;Richard&rsquo;,1,NULL)<br />INSERT INTO Employee_Tree VALUES(&lsquo;Stephen&rsquo;,2,1)<br />INSERT INTO Employee_Tree VALUES(&lsquo;Clemens&rsquo;,3,2)<br />INSERT INTO Employee_Tree VALUES(&lsquo;Malek&rsquo;,4,2)<br />INSERT INTO Employee_Tree VALUES(&lsquo;Goksin&rsquo;,5,4)</p>
<p>&#8211;Requete recursive<br />WITH SimpleRecursive(Employee_NM,Employee_ID,ReportsTo) AS<br />( SELECT Employee_NM, Employee_ID, ReportsTo FROM Employee_Tree WHERE Employee_ID = 2<br />UNION ALL<br />SELECT p.Employee_NM, p.Employee_ID, p.reportsTo FROM Employee_Tree p INNER JOIN SimpleRecursive A ON A.Employee_ID = P.ReportsTo<br />)<br />SELECT sr.Employee_NM AS Employee, et.Employee_NM As Boss FROM SimpleRecursive sr INNER JOIN Employee_Tree et ON sr.ReportsTo = et.Employee_ID</p>
<p>lien : <a href="http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/">http://sqlpro.developpez.com/cours/sqlserver/cte-recursives/</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Récursivité, CTE et génération de table.</title>
		<link>https://blog.developpez.com/ylarvor/p5061/interrogation/sql-server-2005/recursivite_cte_et_generation_de_table</link>
		<comments>https://blog.developpez.com/ylarvor/p5061/interrogation/sql-server-2005/recursivite_cte_et_generation_de_table#comments</comments>
		<pubDate>Mon, 11 Feb 2008 09:54:38 +0000</pubDate>
		<dc:creator><![CDATA[ylarvor]]></dc:creator>
				<category><![CDATA[SQL Server 2005]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Bonjour, Samedi, en me promenant sur le site GUSS, il m&#8217;a été démontré une technique remarquable : l&#8217;utilisation des CTE pour générer une table. Notez l&#8217;option MAXRECURSION qui permet de dépasser 100 récursions par défaut. Encore une utilisation magnifique des CTE sur SQL Serveur 2005. A rapprochez de l&#8217;article sur GO [count]! WITH CTETemps AS [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Bonjour,</p>
<p>Samedi, en me promenant sur le site GUSS, il m&rsquo;a été démontré une technique remarquable : l&rsquo;utilisation des CTE pour générer une table. Notez l&rsquo;option MAXRECURSION qui permet de dépasser 100 récursions par défaut. Encore une utilisation magnifique des CTE sur SQL Serveur 2005. A rapprochez de l&rsquo;article sur GO [count]!</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">WITH CTETemps AS &nbsp; <br />
&nbsp; ( &nbsp; <br />
&nbsp; &nbsp; SELECT cast('1990-01-01' AS datetime) Date &nbsp; <br />
&nbsp; &nbsp; UNION ALL &nbsp; <br />
&nbsp; &nbsp; SELECT Date + 1 &nbsp; <br />
&nbsp; &nbsp; FROM CTETemps &nbsp; <br />
&nbsp; &nbsp; WHERE Date + 1 &lt; '2031-01-01' &nbsp; <br />
&nbsp; ) &nbsp; <br />
SELECT top 10 * FROM CTETEMPS ORDER BY Date desc OPTION (MAXRECURSION 0);</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
