<?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</title>
	<atom:link href="https://blog.developpez.com/ylarvor/pcategory/interrogation/sql/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>Connaissez vous l&#8217;instruction GO [count] ?</title>
		<link>https://blog.developpez.com/ylarvor/p5056/interrogation/sql/go_count</link>
		<comments>https://blog.developpez.com/ylarvor/p5056/interrogation/sql/go_count#comments</comments>
		<pubDate>Fri, 08 Feb 2008 13:32:29 +0000</pubDate>
		<dc:creator><![CDATA[ylarvor]]></dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[cette commande sql serveur non transact sql, mais reconnu par le manager et sqlcmd et osql offre des possibilités alors insoupconnées en SQL. Attention! Toad ne l&#8217;accepte pas! lien msdn : http://msdn2.microsoft.com/en-us/library/ms188037.aspx Exemple : le problème N°6 de sqlpro ( concours developpez.com ) Pour cet exercice, il s&#8217;agit d&#8217;alimenter les nombres de 0 à 9999 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>cette commande sql serveur non transact sql, mais reconnu par le manager et sqlcmd et osql offre des possibilités alors insoupconnées en SQL. Attention! Toad ne l&rsquo;accepte pas!</p>
<p>lien msdn : http://msdn2.microsoft.com/en-us/library/ms188037.aspx</p>
<p><span id="more-23"></span></p>
<p>Exemple : le problème N°6 de sqlpro ( <a href="http://sqlpro.developpez.com/Exercices/Index.html">concours developpez.com</a> )</p>
<p>Pour cet exercice,  il s&rsquo;agit d&rsquo;alimenter les nombres de 0 à 9999 dans une table de nom T_ENTIER_ENT contenant un seul champ de type entier et de nom ENT_N. Au départ, cette table contient les nombres de 0 à 9.<br />
J&rsquo;ai intitulé ce problème, &lsquo;énumération&rsquo;&#8230; </p>
<p>La table T_ENTIER_NET est ainsi constituée :   </p>
<p>CREATE TABLE T_ENTIER_ENT<br />
(ENT_N INTEGER);</p>
<p>INSERT INTO T_ENTIER_ENT VALUES (0) ;<br />
INSERT INTO T_ENTIER_ENT VALUES (1) ;<br />
INSERT INTO T_ENTIER_ENT VALUES (2) ;<br />
INSERT INTO T_ENTIER_ENT VALUES (3) ;<br />
INSERT INTO T_ENTIER_ENT VALUES (4) ;<br />
INSERT INTO T_ENTIER_ENT VALUES (5) ;<br />
INSERT INTO T_ENTIER_ENT VALUES (6) ;<br />
INSERT INTO T_ENTIER_ENT VALUES (7) ;<br />
INSERT INTO T_ENTIER_ENT VALUES (8) ;<br />
INSERT INTO T_ENTIER_ENT VALUES (9) ;</p>
<p>ENT_N<br />
&#8212;&#8212;<br />
0<br />
1<br />
2<br />
3<br />
4<br />
5<br />
6<br />
7<br />
8<br />
9</p>
<p>Sauriez vous faire une telle requête avec un seul update ?</p>
<p>Voici un extrait de la table des données à insérer : </p>
<p>NOMBRE<br />
&#8212;&#8212;&#8212;&#8211;<br />
10<br />
11<br />
12<br />
13<br />
14<br />
&#8230;<br />
9995<br />
9996<br />
9997<br />
9998<br />
9999 </p>
<p>Ma réponse :</p>
<p>INSERT INTO T_ENTIER_ENT(ENT_N) SELECT MAX(ENT_N)+1 FROM T_ENTIER_ENT;<br />
go 9991</p>
<p>prodigieux, non ?</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pourquoi ne trie t&#8217;on jamais une vue en SQL ?</title>
		<link>https://blog.developpez.com/ylarvor/p5030/interrogation/sql/vue_et_tri</link>
		<comments>https://blog.developpez.com/ylarvor/p5030/interrogation/sql/vue_et_tri#comments</comments>
		<pubDate>Mon, 04 Feb 2008 19:15:19 +0000</pubDate>
		<dc:creator><![CDATA[ylarvor]]></dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[En SQL ANSI, il est connu qu&#8217;une vue ne doit jamais être trié. On n&#8217;utilise donc jamais de ORDER BY dans une vue. J&#8217;avoue que j&#8217;ai essayé de trouver une bon raison à cela et je l&#8217;ai finalement trouvé&#8230; Comme vous le savez, une vue n&#8217;est qu&#8217;un enregistrement de requête, elle n&#8217;a pas d&#8217;existence physique [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>En SQL ANSI, il est connu qu&rsquo;une vue ne doit jamais être trié</strong>. On n&rsquo;utilise donc jamais de ORDER BY dans une vue.<br />
J&rsquo;avoue que j&rsquo;ai essayé de trouver une bon raison à cela et je l&rsquo;ai finalement trouvé&#8230;</p>
<p>Comme vous le savez, une vue n&rsquo;est qu&rsquo;un enregistrement de requête, elle n&rsquo;a pas d&rsquo;existence physique comme une table à part les vues matérialisées mais c&rsquo;est un autre problème!</p>
<p>Imaginez le scénario suivant :</p>
<p>Vous créez sur sql serveur une vue avec un order by. SQL Serveur 2000 ne posera aucune question et conservera le tri en réserve comme vous le souhaitez.</p>
<p>CREATE VIEW MAVUE AS SELECT NOM,PRENOM FROM FAMILLE ORDER BY NOM,PRENOM;</p>
<p>Jérome, votre collègue de toujours à besoin de cette vue mais lui, il veut trié par PRENOM,NOM&#8230;il écrit donc sa requète :</p>
<p>SELECT * FROM MAVUE ORDER BY PRENOM,NOM;</p>
<p>Jérome a le droit d&rsquo;écrire cela.</p>
<p>Maintenant, Qu&rsquo;avez vous demander à SQL SERVEUR 2000 ?</p>
<p>Il doit trier par NOM,PRENOM puis par PRENOM,NOM dans la même requête, avouez que c&rsquo;est fort en chocolat de demander cela. </p>
<p>Voilà, pour moi, la raison pratique pour laquelle on ne doit jamais écrire un order by dans une vue. Parce qu&rsquo;il y a aura 10 utilisateurs différents de la vue et qu&rsquo;aucun d&rsquo;eux n&rsquo;aura les mêmes besoins. Alors même si sql serveur 2000 autorise le order by dans une vue, ne l&rsquo;utilisez jamais dans la vue mais en dehors, au plus prés du besoin!</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Que signifie le terme SQL Dynamique sous SQL Server ?</title>
		<link>https://blog.developpez.com/ylarvor/p6823/interrogation/sql/sql_dynamique_sous_sql_server</link>
		<comments>https://blog.developpez.com/ylarvor/p6823/interrogation/sql/sql_dynamique_sous_sql_server#comments</comments>
		<pubDate>Mon, 24 Nov 2008 12:53:46 +0000</pubDate>
		<dc:creator><![CDATA[ylarvor]]></dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Chaque développeur confirmé ou DBA connaît la définition et l&#8217; usage du SQL Dynamique mais une personne qui découvre les bases de données ne saura pas nécessairement ce que signifie ce terme surtout que l&#8217; aide en ligne de SQL Server ne fournit pas de définition du concept et que très peu d&#8217; auteurs ont [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Chaque développeur confirmé ou DBA connaît la définition et l&rsquo; usage du SQL Dynamique mais une personne qui découvre les bases de données ne saura pas nécessairement ce que signifie ce terme surtout que l&rsquo; aide en ligne de SQL Server ne fournit pas de définition du concept et que très peu d&rsquo; auteurs ont trouvé utile de préciser ce concept, spécifiquement pour SQL Server, sur le web.</p>
<p>  <span id="more-24"></span>
<p><u>1 Définition.</u></p>
<p>Le SQL Dynamique permet de construire une requête de toute pièce dans une chaîne de caractères puis d&rsquo; exécuter la chaîne avec la commande EXEC, aussi nommée EXECUTE.</p>
<p>Exemple:</p>
<p>/* Déclaration des variables */   <br />DECLARE @MaColonne AS VARCHAR(25);    <br />DECLARE @MonSQL AS VARCHAR(500);    <br />/* Définition du paramètre */    <br />SET @MaColonne = &lsquo;Nom';    <br />/* Ecriture de la requête */    <br />SET @MonSQL = &lsquo;SELECT &lsquo; + @MaColonne + &lsquo; FROM Agriculteur';    <br />/* Exécution de la requête */    <br />EXEC(@MonSQL)</p>
<p> <u>2 Usage.</u></p>
<p>L&rsquo; usage le plus fréquent est un site de commerce électronique qui propose de sélectionner des articles suivant plusieurs critères différents ( date, auteur, édition, langue ).</p>
<p>Dans la procédure stockée, on doit construire la chaîne de caractères en s&rsquo; appliquant à ajouter dans le WHERE les différentes conditions qui ont été choisis par l&rsquo; internaute. Une fois, la chaîne de caractères construite. On peux l&rsquo; exécuter et ramener les livres sélectionnées.</p>
<p><u>3 Approfondissements.</u></p>
<p>Les problèmes que soulève le SQL Dynamique sont le fait que le EXECUTE aura un environnement d&rsquo; exécution différent de la procédure stockée qui l&rsquo; appelle. Cela entraîne différents problèmes, notamment, si l&rsquo; on désire ramener un paramètre depuis EXECUTE.</p>
<p>Pour résoudre le problème des paramètres de sorties, on utilise la procédure stockée système SP_EXECUTESQL.</p>
<p><u>3.1 SP_EXECUTESQL.</u></p>
<p>Le premier avantage de SP_EXECUTESQL est que le plan d&rsquo; exécution de la requête est conservé par SQL Server entre les différentes exécutions. Pour un lot d&rsquo; une centaine d&rsquo; exécution, cela peut générer un gain de temps appréciable par rapport à l&rsquo; utilisation de EXEC.</p>
<p>Le plus grand avantage de cette fonction est l&rsquo; utilisation de paramètres de sorties.</p>
<p>Exemple :</p>
<p>DECLARE @IntVariable int;   <br />DECLARE @SQLString nvarchar(500);    <br />DECLARE @ParmDefinition nvarchar(500);    <br />DECLARE @max_title varchar(30); </p>
<p>SET @IntVariable = 197;   <br />SET @SQLString = N&rsquo;SELECT @max_titleOUT = max(Title)     <br />   FROM AdventureWorks.HumanResources.Employee    <br />   WHERE ManagerID = @level';    <br />SET @ParmDefinition = N&rsquo;@level tinyint, @max_titleOUT varchar(30) OUTPUT'; </p>
<p>EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @max_titleOUT=@max_title OUTPUT;   <br />SELECT @max_title;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
