<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://www.sqlspot.com/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>SQLspot : un focus sur vos donn&#233;es !</title>
	<link>https://www.sqlspot.com/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.sqlspot.com/spip.php?id_rubrique=5&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>SQLspot : un focus sur vos donn&#233;es !</title>
		<url>https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L144xH126/siteon0-2d314.png?1669020810</url>
		<link>https://www.sqlspot.com/</link>
		<height>126</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>XML avec Oracle</title>
		<link>https://www.sqlspot.com/XML-avec-Oracle.html</link>
		<guid isPermaLink="true">https://www.sqlspot.com/XML-avec-Oracle.html</guid>
		<dc:date>2008-12-27T16:22:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		
		



		<description>&lt;p&gt;Aper&#231;ut des possibilit&#233; d'XML DB, l'outil d'Oracle destin&#233; &#224; g&#233;rer des contenus XML&lt;/p&gt;

-
&lt;a href="https://www.sqlspot.com/-Ressources-SQL-.html" rel="directory"&gt;Ressources SQL&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;XML DB est le nom de l'outil d'Oracle destin&#233; &#224; g&#233;rer des contenus XML en base de donn&#233;es relationnelle. Cet ar-ticle fait le point sur cette technologies et en pr&#233;sente les avantages illustr&#233; de nombreux exemples.&lt;/p&gt;
&lt;p&gt;Par &lt;strong&gt; &lt;em class=&#034;spip&#034;&gt;Christian Soutou&lt;/em&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;div class='spip_document_65 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;38&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/pdf/XMLDB.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 628.5 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-65 '&gt;&lt;strong&gt;XML avec Oracle par Chrsitian Soutou
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Maintenance des index dans les VLDB</title>
		<link>https://www.sqlspot.com/Maintenace-des-index-dans-les-VLDB.html</link>
		<guid isPermaLink="true">https://www.sqlspot.com/Maintenace-des-index-dans-les-VLDB.html</guid>
		<dc:date>2008-09-28T18:35:09Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		
		



		<description>&lt;p&gt;L'entretient des index est une condition essentielle et primordiale de maintient des performances des requ&#234;tes.
Voici une petite &#233;tude qui fait le point sur ce qu'est un index, comment il vieillit et comment on proc&#233;de &#224; sa maintenance dans le cadre des VLDB dont le service est en principe continu&#8230;&lt;/p&gt;

-
&lt;a href="https://www.sqlspot.com/-Ressources-SQL-.html" rel="directory"&gt;Ressources SQL&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Qu'est ce qu'un index ?&lt;/li&gt;&lt;li&gt; Quel est sa structure ?&lt;/li&gt;&lt;li&gt; Pourquoi r&#233;indexer ?&lt;/li&gt;&lt;li&gt; Comment &#233;viter la fragmentation ?&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Voici quelques unes des question auquel cet article tente de r&#233;pondre de mani&#232;re pragmatique&#8230;&lt;/p&gt;
&lt;p&gt;En prime, une proc&#233;dure de maintenance automatique des index sp&#233;cialement con&#231;ue pour les VLDB, mais que les petites et moyennes bases pourront utiliser en toute s&#233;r&#233;nit&#233; !&lt;/p&gt;
&lt;div class='spip_document_62 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;30&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/pdf/MaintenanceIndexVLDB.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 373.8 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-62 '&gt;&lt;strong&gt;&#201;tude maintenance index VLDB
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Le code de cet article :&lt;/p&gt;
&lt;div class='spip_document_61 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;67&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/zip/Maintenance_index_SQL-2.zip' class=&#034; spip_doc_lien&#034; title='Zip - 4.8 kio' type=&#034;application/zip&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/zip-f045b.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-61 '&gt;&lt;strong&gt;Code SQL de l'article sur la maintenance des index dans les VLDBs
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Les r&#232;gles de CODD pour un SGBD relationnel</title>
		<link>https://www.sqlspot.com/Les-regles-de-CODD-pour-un-SGBD-relationnel.html</link>
		<guid isPermaLink="true">https://www.sqlspot.com/Les-regles-de-CODD-pour-un-SGBD-relationnel.html</guid>
		<dc:date>2008-05-18T13:16:13Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		
		



		<description>&lt;p&gt;Les r&#232;gles de CODD constituent la Loi que tout bon syst&#232;me de bases de donn&#233;es relationnel devrait respecter &#224; la lettre&#8230; Mais quelles sont ces r&#232;gles ? Comment s'appliquent-elles ?&lt;/p&gt;

-
&lt;a href="https://www.sqlspot.com/-Ressources-SQL-.html" rel="directory"&gt;Ressources SQL&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Les douze r&#232;gles de Codd (num&#233;rot&#233;s de 0 &#224; 12, donc en fait treize&#8230;) formalisent la notion de SGBD relationnel. C'est bien le docteur Codd, p&#232;re fondateur de l'alg&#232;bre relationnelle qui grave ainsi dans le marbre les 13 commandements de la Loi pour tout SGBD se pr&#233;tendant relationnel. Ces r&#232;gles sont bas&#233;es sur ses travaux originaux effectu&#233;s &#224; partir de 1970, et ont &#233;t&#233; publi&#233;es dans deux articles de vulgarisation du magazine Computerworld (octobre 1985) : &lt;em class=&#034;spip&#034;&gt;Is your DBMS really relational&lt;/em&gt; ? et &lt;em class=&#034;spip&#034;&gt;Does your DBMS run by the rules&lt;/em&gt; ?
Ces r&#232;gles constituent les fondements des bases de donn&#233;es relationnelles et permettent de conna&#238;tre le niveau relationnel du produit d'un &#233;diteur. Ne pas s'y contraindre impliquera plus d'inconv&#233;nients que d'avantages. En un sens elles gravent dans le marbre &#171; la Loi &#187; que tout bon SGBD relationnel devrait suivre.
Juridiquement il s'agit l&#224; du document le plus pr&#233;cieux concernant les r&#232;gles de l'art des bases de donn&#233;es relationnelles.&lt;/p&gt;
&lt;div class='spip_document_59 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;61&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/pdf/SQL_databases_SGBDR_regles_codd.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 330 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-59 '&gt;&lt;strong&gt;L'article sur les r&#232;gles de Codd pour les SGBD relationnels
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class='spip_document_58 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;30&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/zip/Codd_Rule_SQL.zip' class=&#034; spip_doc_lien&#034; title='Zip - 5.1 kio' type=&#034;application/zip&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/zip-f045b.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-58 '&gt;&lt;strong&gt;Code SQL associ&#233; &#224; l'article
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;D'autres ressources sur le sujet par SQLpro sur &lt;a href=&#034;http://sqlpro.developpez.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;developpez.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Des UDF (fonctions utilisateur) pour SQL Server</title>
		<link>https://www.sqlspot.com/Des-UDF-fonctions-utilisateur-pour-SQL-Server.html</link>
		<guid isPermaLink="true">https://www.sqlspot.com/Des-UDF-fonctions-utilisateur-pour-SQL-Server.html</guid>
		<dc:date>2008-02-16T21:28:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		
		



		<description>&lt;p&gt;Quelques fonctions bien utiles pour d&#233;velopper avec SQL Server&lt;/p&gt;

-
&lt;a href="https://www.sqlspot.com/-Ressources-SQL-.html" rel="directory"&gt;Ressources SQL&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Des fonctions en vrac &#233;crites en transact SQL pour les d&#233;veloppeurs.&lt;/p&gt;
&lt;div class='spip_document_56 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;28&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/pdf/Quelques_UDF_pour_SQL_Server.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 193.4 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-56 '&gt;&lt;strong&gt;Des UDF pour MS SQL Server
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_57 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;33&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/zip/codeUDF.zip' class=&#034; spip_doc_lien&#034; title='Zip - 8.9 kio' type=&#034;application/zip&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/zip-f045b.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-57 '&gt;&lt;strong&gt;Code Transact SQL des fonctions
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;textarea readonly='readonly' cols='40' rows='1615' class='spip_cadre spip_cadre_block' dir='ltr'&gt;/****************************************************************************/ -- mise en majuscule de la premi&#232;re lettre et minuscule de toutes les autres /****************************************************************************/ CREATE FUNCTION F_FIRST_CAP (@NAME VARCHAR(8000)) RETURNS VARCHAR(8000) AS BEGIN IF @NAME IS NULL RETURN NULL IF LEN(@NAME) = 1 RETURN UPPER(@NAME) RETURN UPPER(SUBSTRING(@NAME, 1, 1)) + LOWER(SUBSTRING(@NAME, 2, LEN(@NAME) -1)) END GO /****************************************************************************/ -- table des jours de semaine /****************************************************************************/ CREATE FUNCTION F_JOUR_SEMAINE () RETURNS TABLE AS RETURN (SELECT 1 AS N, 'Lundi' AS JOUR UNION SELECT 2 AS N, 'Mardi' AS JOUR UNION SELECT 3 AS N, 'Mercredi' AS JOUR UNION SELECT 4 AS N, 'Jeudi' AS JOUR UNION SELECT 5 AS N, 'Vendredi' AS JOUR UNION SELECT 6 AS N, 'Samedi' AS JOUR UNION SELECT 7 AS N, 'Dimanche' AS JOUR) GO /****************************************************************************/ -- calcul de la date de P&#226;que /****************************************************************************/ CREATE FUNCTION F_PAQUE (@AN INT) RETURNS DATETIME AS BEGIN IF @AN IS NULL RETURN NULL DECLARE @G INT DECLARE @I INT DECLARE @J INT DECLARE @C INT DECLARE @H INT DECLARE @L INT DECLARE @JourPaque INT DECLARE @MoisPaque INT DECLARE @DimPaque DATETIME SET @G = @AN % 19 SET @C = @AN / 100 SET @H = (@C - @C / 4 - (8 * @C + 13) / 25 + 19 * @G + 15) % 30 SET @I = @H - (@H / 28) * (1 - (@H / 28) * (29 / (@H + 1)) * ((21 - @G) / 11)) SET @J = (@AN + @AN / 4 + @I + 2 - @C + @C / 4) % 7 SET @L = @I - @J SET @MoisPaque = 3 + (@L + 40) / 44 SET @JourPaque = @L + 28 - 31 * (@MoisPaque / 4) SET @DimPaque = CAST(CAST(@AN AS VARCHAR(4)) + CASE WHEN @MoisPaque &lt; 10 THEN '0' + CAST(@MoisPaque AS CHAR(1)) ELSE CAST(@MoisPaque AS CHAR(2)) END + CASE WHEN @JourPaque &lt; 10 THEN '0' + CAST(@JourPaque AS CHAR(1)) ELSE CAST(@JourPaque AS CHAR(2)) END AS DATETIME) RETURN @DimPaque END GO /****************************************************************************/ -- Transformation d'un entier en chaine binaire VARCHAR /****************************************************************************/ CREATE FUNCTION F_INT_TO_BIT (@I INT) RETURNS VARCHAR(512) AS BEGIN -- effet de bord IF @I IS NULL RETURN NULL -- valeur basique IF @I = 0 RETURN '0' -- signe n&#233;gatif DECLARE @SIGNE VARCHAR(1) SET @SIGNE = '' IF @I &lt; 0 SET @SIGNE = '-' -- conversion DECLARE @BIT_OUT VARCHAR(512) SET @BIT_OUT = '' WHILE NOT @I = 0 BEGIN IF @I % 2 = 0 SET @BIT_OUT = '0' + @BIT_OUT ELSE SET @BIT_OUT = '1' + @BIT_OUT SET @I = @I / 2 END RETURN @SIGNE + @BIT_OUT END GO /****************************************************************************/ -- retourne le nom de l'utilisateur d'un id (userid) donn&#233; /****************************************************************************/ CREATE FUNCTION F_FORMATUSER(@USERID SMALLINT) RETURNS VARCHAR(32) AS BEGIN RETURN(CAST(SUBSTRING(USER_NAME(@USERID), 1, 32) AS VARCHAR(32))) END GO /****************************************************************************/ -- retourne une chaine interpr&#233;table en chaine SQL /****************************************************************************/ CREATE FUNCTION F_QUOTESTR(@S VARCHAR(8000)) RETURNS VARCHAR(8000) AS BEGIN DECLARE @OUT VARCHAR(8000) SET @OUT = CASE WHEN @S IS NULL THEN 'NULL' ELSE ''''+REPLACE(@S, '''', '''''')+'''' END RETURN (@OUT) END GO /****************************************************************************/ -- retourne une chaine de caract&#232;re repr&#233;sentant une date au format ISO /****************************************************************************/ CREATE FUNCTION F_DATEISO(@D DATETIME) RETURNS VARCHAR(8000) AS BEGIN DECLARE @OUT VARCHAR(12) SET @OUT = CASE WHEN @D IS NULL THEN 'NULL' ELSE ''''+CONVERT(CHAR(10), @D, 121)+'''' END RETURN (@OUT) END GO /****************************************************************************/ -- obtient la liste des colonnes d'une table /****************************************************************************/ CREATE FUNCTION F_LISTCOLS (@NOM_TABLE VARCHAR(128)) RETURNS VARCHAR(8000) AS BEGIN DECLARE @RETVAL VARCHAR(8000) SET @RETVAL = '' SELECT @RETVAL = @RETVAL +COLUMN_NAME+', ' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @NOM_TABLE IF @RETVAL IS NULL RETURN NULL IF @RETVAL = '' RETURN NULL SET @RETVAL = SUBSTRING(@RETVAL, 1, LEN(@RETVAL) -1) RETURN @RETVAL END GO /****************************************************************************/ -- purge de caract&#232;res ind&#233;sirables /****************************************************************************/ -- exemple : F_RESTRICT('&#224; Paris...?', 'abcdefghijklmnopqrstuvwxyz') =&gt; 'aris' CREATE FUNCTION F_RESTRICT (@IN VARCHAR (8000), @CHARSOK VARCHAR(256)) RETURNS VARCHAR (8000) AS BEGIN -- effets de bord IF @IN IS NULL RETURN NULL IF @CHARSOK IS NULL RETURN NULL IF LEN(@IN) = 0 RETURN @IN -- initialisation DECLARE @I INTEGER DECLARE @OUT VARCHAR(8000) SET @OUT = '' -- lecture caract&#232;re par caract&#232;re SET @I =1 WHILE @I &lt;= LEN(@IN) BEGIN IF PATINDEX('%' + SUBSTRING(@IN, @I, 1)+ '%', @CHARSOK) &gt; 0 SET @OUT = @OUT + SUBSTRING(@IN, @I, 1) SET @I = @I + 1 END RETURN @OUT END GO /****************************************************************************/ -- conversion d'heure minute seconde litt&#233;rale en heure d&#233;cimale /****************************************************************************/ CREATE FUNCTION F_CONVERT_HMS_HD (@HMS CHAR(8)) RETURNS FLOAT AS BEGIN DECLARE @H FLOAT DECLARE @M FLOAT DECLARE @S FLOAT DECLARE @RETVAL FLOAT -- cas trivial IF @HMS IS NULL RETURN NULL -- voir si saisie erron&#233;e (pas de chiffres) SET @HMS = REPLACE(@HMS, ':', '') IF LEN(@HMS) &lt;&gt; 6 RETURN NULL DECLARE @I INTEGER SET @I = 1 WHILE @I &lt; 7 BEGIN IF SUBSTRING(@HMS, @I, 1) NOT BETWEEN '0' AND '9' RETURN NULL SET @I = @I + 1 END -- la saisie est correcte SET @H = CAST(SUBSTRING(@HMS, 1, 2) AS FLOAT) SET @M = CAST(SUBSTRING(@HMS, 3, 2) AS FLOAT) / 60.0 SET @S = CAST(SUBSTRING(@HMS, 5, 2) AS FLOAT) / 3600.0 SET @RETVAL = @H + @M + @S RETURN @RETVAL END GO /****************************************************************************/ -- Compte le nombre d'occurences d'une sous chaine dans une chaine /****************************************************************************/ CREATE FUNCTION dbo.F_COUNTSTR (@STR VARCHAR(8000), @PATTERN VARCHAR(8000)) RETURNS INTEGER AS BEGIN DECLARE @I INTEGER -- cas trivial donn&#233;es en entr&#233;e NULL IF @STR IS NULL OR @PATTERN IS NULL BEGIN SET @I = NULL RETURN @I END -- cas trivial donn&#233;es en entr&#233;e vide IF @STR ='' OR @PATTERN ='' BEGIN SET @I = 0 RETURN @I END -- cas g&#233;n&#233;ral DECLARE @STR2 VARCHAR(8000) SET @STR2 = @STR SET @I = 0 WHILE PATINDEX('%'+@PATTERN+'%', @STR2) &gt; 0 BEGIN SET @I = @I +1 IF LEN(@STR2) &gt; PATINDEX('%'+@PATTERN+'%', @STR2) + LEN(@PATTERN) SET @STR2 = SUBSTRING(@STR2, PATINDEX('%'+@PATTERN+'%', @STR2) + LEN(@PATTERN), LEN(@STR2) - PATINDEX('%'+@PATTERN+'%', @STR2) - LEN(@PATTERN)+1) ELSE SET @STR2 = '' END RETURN @I END GO /****************************************************************************/ -- remplace un datetime par une datetime avec heure &#224; zero /****************************************************************************/ CREATE FUNCTION F_DATETIME_AS_DATE (@DT DATETIME) RETURNS DATETIME AS BEGIN RETURN CAST(FLOOR(CAST(@DT AS FLOAT)) AS DATETIME) END GO /****************************************************************************/ -- soundex 2 (Celko SQL Avanc&#233; p 86) /****************************************************************************/ CREATE FUNCTION F_SOUNDEX2 (@NAME VARCHAR (128)) RETURNS CHAR (4) AS BEGIN DECLARE @SNDX2 CHAR(4) SET @SNDX2 = ' ' IF @NAME IS NULL RETURN @SNDX2 DECLARE @FIRSTLET CHAR(1) DECLARE @XGRAM VARCHAR(4) -- mise en majuscule SET @NAME = UPPER(@NAME) -- d&#233; diacritisation SET @NAME = dbo.F_TRANSLATE(@NAME, '&#192;&#194;&#196;&#201;&#200;&#202;&#203;&#206;&#207;&#212;&#214;&#217;&#219;&#220;&#199;', 'AAAEEEEIIOOUUUC') -- restriction aux letttres SET @NAME = dbo.F_RESTRICT(@NAME, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') IF @NAME = '' RETURN @SNDX2 -- substitution des pr&#233;fixes IF LEN(@NAME) &gt;= 3 BEGIN SET @XGRAM = SUBSTRING(@NAME, 1, 3) IF @XGRAM = 'MAC' IF LEN(@NAME) = 3 SET @NAME = 'MCC' ELSE SET @NAME = 'MCC'+ SUBSTRING(@NAME, 4, LEN(@NAME) -3) IF @XGRAM = 'SCH' IF LEN(@NAME) = 3 SET @NAME = 'SSS' ELSE SET @NAME = 'SSS'+ SUBSTRING(@NAME, 4, LEN(@NAME) -3) END IF LEN(@NAME) &gt;= 2 BEGIN SET @XGRAM = SUBSTRING(@NAME, 1, 2) IF @XGRAM = 'KN' IF LEN(@NAME) = 2 SET @NAME = 'NN' ELSE SET @NAME = 'NN'+ SUBSTRING(@NAME, 3, LEN(@NAME) -2) IF @XGRAM = 'PF' IF LEN(@NAME) = 2 SET @NAME = 'FF' ELSE SET @NAME = 'FF'+ SUBSTRING(@NAME, 3, LEN(@NAME) -2) IF @XGRAM = 'PH' IF LEN(@NAME) = 2 SET @NAME = 'FF' ELSE SET @NAME = 'FF'+ SUBSTRING(@NAME, 3, LEN(@NAME) -2) END IF LEN(@NAME) &gt;= 1 BEGIN SET @XGRAM = SUBSTRING(@NAME, 1, 1) IF @XGRAM = 'K' IF LEN(@NAME) = 1 SET @NAME = 'C' ELSE SET @NAME = 'C'+ SUBSTRING(@NAME, 2, LEN(@NAME) -1) END -- transformations sauf premi&#232;re lettre '' SET @FIRSTLET = SUBSTRING(@NAME, 1, 1) IF LEN(@NAME) &gt; 1 SET @NAME = dbo.F_TRANSLATE(SUBSTRING(@NAME, 2, LEN(@NAME)-1), 'AEIOUY', 'AAAAAA') ELSE SET @NAME = '' SET @NAME = REPLACE(@NAME, 'DG', 'GG') SET @NAME = REPLACE(@NAME, 'CAAN', 'TAAN') SET @NAME = REPLACE(@NAME, 'D', 'T') SET @NAME = REPLACE(@NAME, 'NST', 'NSS') SET @NAME = REPLACE(@NAME, 'AV', 'AF') SET @NAME = REPLACE(@NAME, 'Q', 'G') SET @NAME = REPLACE(@NAME, 'Z', 'S') SET @NAME = REPLACE(@NAME, 'M', 'N') SET @NAME = REPLACE(@NAME, 'KN', 'NN') SET @NAME = REPLACE(@NAME, 'K', 'C') -- remplacement des H par A sauf suivi et pr&#233;c&#233;d&#233; par A (exemple '...AHA...') SET @NAME = REPLACE(@NAME, 'AHA', 'AhA') SET @NAME = REPLACE(@NAME, 'H', 'A') SET @NAME = REPLACE(@NAME, 'AhA', 'AHA') -- remplacements divers SET @NAME = REPLACE(@NAME, 'AW', 'A') SET @NAME = REPLACE(@NAME, 'PH', 'FF') SET @NAME = REPLACE(@NAME, 'SCH', 'SSS') -- suppression A en fin de mot WHILE SUBSTRING(@NAME, LEN(@NAME), 1) = 'A' IF LEN(@NAME) &gt; 1 SET @NAME = SUBSTRING(@NAME, 1, LEN(@NAME)-1) ELSE SET @NAME = '' -- suppression S en fin WHILE SUBSTRING(@NAME, LEN(@NAME), 1) = 'S' IF LEN(@NAME) &gt; 1 SET @NAME = SUBSTRING(@NAME, 1, LEN(@NAME)-1) ELSE SET @NAME = '' -- supression NT en fin IF LEN(@NAME) &gt;= 2 IF SUBSTRING(@NAME, LEN(@NAME)-1, 2) = 'NT' IF LEN(@NAME) &gt; 2 SET @NAME = SUBSTRING(@NAME, 1, LEN(@NAME) -2) -- suppression des A SET @NAME = REPLACE(@NAME, 'A', '') -- test effet de bord : @NAME vide IF @NAME = '' BEGIN SET @SNDX2 = @FIRSTLET +' ' RETURN @SNDX2 END -- suppression des r&#233;p&#233;titions DECLARE @OUT VARCHAR(4) SET @OUT = @FIRSTLET DECLARE @I INTEGER DECLARE @C CHAR(1) DECLARE @CC CHAR(1) SET @I = 1 SET @CC = '' WHILE @I &lt;= LEN(@NAME) BEGIN SET @C = SUBSTRING(@NAME, @I, 1) IF @C &lt;&gt; @CC BEGIN IF LEN(@OUT) &lt; 4 SET @OUT = @OUT + @C SET @CC = @C END IF LEN(@OUT) = 4 BREAK SET @I = @I + 1 END SET @SNDX2 = @OUT RETURN @SNDX2 END GO /****************************************************************************/ -- remplacement par substitution de caract&#232;res /****************************************************************************/ -- exemple : F_TRANSLATE('&#224; Paris...', '&#224;.', 'a') =&gt; 'a paris' CREATE FUNCTION F_TRANSLATE (@VALIN VARCHAR (8000), @FROM VARCHAR(256), @TO VARCHAR(256)) RETURNS VARCHAR (8000) AS BEGIN -- effets de bord IF @VALIN IS NULL RETURN NULL IF @FROM IS NULL OR @TO IS NULL RETURN NULL IF LEN(@VALIN) = 0 RETURN @VALIN -- initialisation DECLARE @I INTEGER DECLARE @OUT VARCHAR(8000) SET @OUT = '' -- lecture caract&#232;re par caract&#232;re SET @I =1 WHILE @I &lt;= LEN(@VALIN) BEGIN IF PATINDEX('%' + SUBSTRING(@VALIN, @I, 1)+ '%', @FROM) &gt; 0 BEGIN IF LEN(@TO) &gt;= PATINDEX('%' + SUBSTRING(@VALIN, @I, 1)+ '%', @FROM) SET @OUT = @OUT + SUBSTRING(@TO, PATINDEX('%' + SUBSTRING(@VALIN, @I, 1)+ '%', @FROM), 1) END ELSE SET @OUT = @OUT + SUBSTRING(@VALIN, @I, 1) SET @I = @I + 1 END RETURN @OUT END GO /****************************************************************************/ -- conversion d'heure d&#233;cimale en heure minute seconde litt&#233;rale /****************************************************************************/ CREATE FUNCTION F_CONVERT_HD_HMS (@HD FLOAT) RETURNS VARCHAR(8) AS BEGIN DECLARE @H INTEGER DECLARE @M INTEGER DECLARE @S INTEGER DECLARE @RETVAL VARCHAR(8) -- cas trivial IF @HD IS NULL RETURN NULL -- r&#233;cup&#233;ration des heures, minutes, secondes SET @H = FLOOR(@HD) SET @HD = @HD - @H SET @HD = @HD * 60 SET @M = FLOOR(@HD) SET @HD = @HD - @M SET @HD = @HD * 60 SET @S = FLOOR(@HD) IF @H &lt; 10 SET @RETVAL = '0'+CAST(@H AS CHAR(1))+':' ELSE SET @RETVAL = CAST(@H AS CHAR(2))+':' IF @M &lt; 10 SET @RETVAL = @RETVAL + '0' + CAST(@M AS CHAR(1))+':' ELSE SET @RETVAL = @RETVAL + CAST(@M AS CHAR(2))+':' IF @S &lt; 10 SET @RETVAL = @RETVAL + '0' + CAST(@S AS CHAR(1)) ELSE SET @RETVAL = @RETVAL + CAST(@S AS CHAR(2))+':' RETURN @RETVAL END GO /****************************************************************************/ -- affichage heure et minute extrait d'une date /****************************************************************************/ CREATE FUNCTION F_DATETIME_AS_HM (@DT DATETIME) RETURNS CHAR(5) AS BEGIN IF @DT IS NULL RETURN NULL DECLARE @H INT DECLARE @M INT SET @H = DATEPART(HOUR, @DT) SET @M = DATEPART(MINUTE, @DT) DECLARE @RETVAL VARCHAR(5) IF @H &lt; 10 SET @RETVAL = '0' + CAST(@H AS CHAR(1))+':' ELSE SET @RETVAL = CAST(@H AS CHAR(2))+':' IF @M &lt; 10 SET @RETVAL = @RETVAL + '0' + CAST(@M AS CHAR(1)) ELSE SET @RETVAL = @RETVAL + CAST(@M AS CHAR(2)) RETURN CAST(@RETVAL AS CHAR(5)) END GO /****************************************************************************/ -- remplace un datetime par une datetime avec date &#224; zero /****************************************************************************/ CREATE FUNCTION F_DATETIME_AS_HOUR (@DT DATETIME) RETURNS DATETIME AS BEGIN RETURN CAST(CAST(@DT AS FLOAT) - FLOOR(CAST(@DT AS FLOAT)) AS DATETIME) END GO /****************************************************************************/ -- compl&#233;te avec des z&#233;ros un nombre converti en chaine de caract&#232;res /****************************************************************************/ CREATE FUNCTION dbo.F_PAD_ZERO (@INT INTEGER, @NBR_ZERO INTEGER) RETURNS VARCHAR(8000) AS BEGIN DECLARE @OUT VARCHAR(8000) -- cas trivial @NBR_ZERO est NULL IF @NBR_ZERO IS NULL RETURN @OUT -- cas trivial @NBR_ZERO &lt; longueur de @INT IF @INT IS NOT NULL IF @NBR_ZERO &lt; LEN(CAST(@INT AS VARCHAR(8000))) RETURN @OUT -- cas g&#233;n&#233;ral SET @OUT = CAST(@INT AS VARCHAR(8000)) WHILE LEN(@OUT) &lt; @NBR_ZERO BEGIN SET @OUT = '0'+@OUT END RETURN @OUT END GO /****************************************************************************/ /* conversion code hexa en d&#233;cimal */ /****************************************************************************/ CREATE FUNCTION F_HEX_TO_DEC (@HEX VARCHAR(16)) RETURNS BIGINT AS BEGIN -- effet de bord IF @HEX IS NULL RETURN NULL -- valeur basique SET @HEX = RTRIM(LTRIM(UPPER(@HEX))) IF @HEX = '' RETURN NULL -- signe n&#233;gatif DECLARE @SIGNE VARCHAR(1) SET @SIGNE = '' IF SUBSTRING(@HEX, 1, 1) = '-' BEGIN SET @SIGNE = '-' SET @HEX = SUBSTRING(@HEX, 2, LEN(@HEX) - 1) END IF SUBSTRING(@HEX, 1, 1) = '+' BEGIN SET @SIGNE = '' SET @HEX = SUBSTRING(@HEX, 2, LEN(@HEX) - 1) END SET @HEX = RTRIM(@HEX) -- conversion DECLARE @INT_OUT BIGINT DECLARE @CHR CHAR(1) DECLARE @I INT SET @INT_OUT = 0 SET @I = 0 WHILE @I &lt; LEN(@HEX) BEGIN SET @CHR = SUBSTRING(@HEX, LEN(@HEX) - @I, 1) SET @INT_OUT = @INT_OUT + POWER(16, @I) * CASE @CHR WHEN '0' THEN 0 WHEN '1' THEN 1 WHEN '2' THEN 2 WHEN '3' THEN 3 WHEN '4' THEN 4 WHEN '5' THEN 5 WHEN '6' THEN 6 WHEN '7' THEN 7 WHEN '8' THEN 8 WHEN '9' THEN 9 WHEN 'A' THEN 10 WHEN 'B' THEN 11 WHEN 'C' THEN 12 WHEN 'D' THEN 13 WHEN 'E' THEN 14 WHEN 'F' THEN 15 ELSE NULL END SET @I = @I + 1 END RETURN @INT_OUT * CASE @SIGNE WHEN '-' THEN -1 ELSE 1 END END GO -- liste toutes les colonnes d'une table CREATE FUNCTION F_LISTE_COLS (@TABLE_NAME VARCHAR(128)) RETURNS VARCHAR(8000) AS BEGIN -- liste des noms de colonnes dans DECLARE @ColumnList VARCHAR(8000) SET @ColumnList = '' -- obtention de la liste des colonnes pour la requ&#234;te de recherche SELECT @ColumnList = @ColumnList + COLUMN_NAME +', ' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TABLE_NAME RETURN SUBSTRING(@ColumnList, 1, LEN(@ColumnList) -1) END GO -- exemple d'utilisation : SELECT dbo.F_LISTE_COLS('T_CONTACT_CTC') /************************************************************ CALCUL DES SAISONS - bas&#233; sur l'algorithmes de Meeus (&#034;Astronomical Algorithms&#034;, 1991) modifi&#233; par Simon Cassidy ------------------------------------------------------------- Fr&#233;d&#233;ric BROUARD - SQLpro - 2004-06-27 - Transact SQL ************************************************************/ CREATE FUNCTION F_SUB_SEASONS (@JDME FLOAT(50)) RETURNS DATETIME AS -- sous fonction utilis&#233;e par les 4 calculs de saisons BEGIN IF @JDME IS NULL RETURN NULL DECLARE @T FLOAT(50) DECLARE @S FLOAT(50) DECLARE @W FLOAT(50) DECLARE @L FLOAT(50) DECLARE @JD FLOAT(50) DECLARE @D DATETIME SET @T = (@JDME - 2451545.0) / 36525 SET @S = 485 * COS(0.43563418129778464 + 33.757041381353048 * @T) + 203 * COS(0.64978608051748876 + 575.33848531501758 * @T) + 199 * COS(0.73443454923921381 + 0.35231216280757538 * @T) + 182 * COS(0.48607419668042079 + 7771.3771552463541 * @T) + 156 * COS(1.2765338149086527 + 786.04194554533876 * @T) + 136 * COS(1.2482594810263443 + 393.02097277266938 * @T) + 77 * COS(0.39339721339952183 + 1150.6769706300352 * @T) + 74 * COS(1.6880824525289155 + 52.969102188531025 * @T) + 70 * COS(0.76061448801912879 + 157.7343580417903 * @T) + 58 * COS(0.34574972482007665 + 588.4926828214484 * @T) + 52 * COS(1.69593643416289 + 2.6298272103200158 * @T) + 50 * COS(0.366868208769208 + 39.81490468210017 * @T) + 45 * COS(0.82972952639810416 + 522.36940057977904 * @T) + 44 * COS(0.43895030687657388 + 550.75533081445974 * @T) + 29 * COS(1.063429113240145 + 77.552256689088878 * @T) + 18 * COS(0.96202548369927443 + 1179.0629008647159 * @T) + 17 * COS(1.5496778428457652 + 79.629809364200341 * @T) + 16 * COS(1.7111207986552408 + 1097.7078858947966 * @T) + 14 * COS(1.7411404617895434 + 548.67777813934822 * @T) + 12 * COS(1.6648695734773908 + 254.43144545527034 * @T) + 12 * COS(1.5203563114122605 + 557.31427814345443 * @T) + 12 * COS(0.36320301734001997 + 606.97767436883066 * @T) + 9 * COS(0.48397980157802756 + 21.32991313471798 * @T) + 8 * COS(0.2696533694331239 + 294.24635013737048 * @T) SET @W = ( 35999.373*@T - 2.47 ) * PI() / 180 SET @L = 1 + 0.0334*COS(@W) + 0.0007*COS(2*@W) SET @JD = @JDME + (0.00001*@S/@L) SET @JD = @JD - 2415020.50208142228 SET @D = CAST(FLOOR(@JD) AS DATETIME) RETURN @D END GO CREATE FUNCTION F_WINTER_DATE (@Y INT) RETURNS DATETIME AS -- calcul de la date de d&#233;but d'hiver BEGIN -- @Y est l'ann&#233;e consid&#233;r&#233;e -- effets de bord : ann&#233;e absente IF @Y IS NULL RETURN NULL -- limites de calculs de l'an 1000 &#224; l'an 3000 IF NOT @Y BETWEEN 1000 AND 3000 RETURN NULL DECLARE @M FLOAT(50) DECLARE @JDME FLOAT(50) SET @M = (CAST(@Y AS FLOAT(50)) - 2000.0) / 1000.0 SET @JDME = 2451900.05952 + 365242.74049 * @M - 0.06223 * SQUARE(@M) - 0.00823 * POWER (@M, 3) + 0.00032 * POWER (@M, 4) RETURN dbo.F_SUB_SEASONS (@JDME) END GO CREATE FUNCTION F_AUTUMN_DATE (@Y INT) RETURNS DATETIME AS -- calcul de la date de d&#233;but d'automne BEGIN -- @Y est l'ann&#233;e consid&#233;r&#233;e -- effets de bord : ann&#233;e absente IF @Y IS NULL RETURN NULL -- limites de calculs de l'an 1000 &#224; l'an 3000 IF NOT @Y BETWEEN 1000 AND 3000 RETURN NULL DECLARE @M FLOAT(50) DECLARE @JDME FLOAT(50) SET @M = (CAST(@Y AS FLOAT(50)) - 2000.0) / 1000.0 SET @JDME = 2451810.21715 + 365242.01767 * @M - 0.11575 * SQUARE(@M) + 0.00337 * POWER (@M, 3) + 0.00078 * POWER (@M, 4) RETURN dbo.F_SUB_SEASONS (@JDME) END GO CREATE FUNCTION F_SUMMER_DATE (@Y INT) RETURNS DATETIME AS -- calcul de la date de d&#233;but de l'&#233;t&#233; BEGIN -- @Y est l'ann&#233;e consid&#233;r&#233;e -- effets de bord : ann&#233;e absente IF @Y IS NULL RETURN NULL -- limites de calculs de l'an 1000 &#224; l'an 3000 IF NOT @Y BETWEEN 1000 AND 3000 RETURN NULL DECLARE @M FLOAT(50) DECLARE @JDME FLOAT(50) SET @M = (CAST(@Y AS FLOAT(50)) - 2000.0) / 1000.0 SET @JDME = 2451716.56767 + 365241.62603 * @M + 0.00325 * SQUARE(@M) + 0.00888 * POWER (@M, 3) - 0.00030 * POWER (@M, 4) RETURN dbo.F_SUB_SEASONS (@JDME) END GO CREATE FUNCTION F_SPRING_DATE (@Y INT) RETURNS DATETIME AS -- calcul de la date de d&#233;but du printemps BEGIN -- @Y est l'ann&#233;e consid&#233;r&#233;e -- effets de bord : ann&#233;e absente IF @Y IS NULL RETURN NULL -- limites de calculs de l'an 1000 &#224; l'an 3000 IF NOT @Y BETWEEN 1000 AND 3000 RETURN NULL DECLARE @M FLOAT(50) DECLARE @JDME FLOAT(50) DECLARE @T FLOAT(50) DECLARE @S FLOAT(50) DECLARE @W FLOAT(50) DECLARE @L FLOAT(50) DECLARE @JD FLOAT(50) DECLARE @D DATETIME SET @M = (CAST(@Y AS FLOAT(50)) - 2000.0) / 1000.0 SET @JDME = 2451623.80984 + 365242.37404 * @M + 0.05169 * SQUARE(@M) - 0.00411 * POWER (@M, 3) - 0.00057 * POWER (@M, 4) RETURN dbo.F_SUB_SEASONS (@JDME) END GO /*********************** EXEMPLE D'UTILISATION ***********************/ SELECT 'PRINTEMPS' AS SAISON, dbo.F_SPRING_DATE(2000) AS DATE_DEBUT UNION SELECT '&#201;T&#201;' AS SAISON, dbo.F_SUMMER_DATE(2000) AS DATE_DEBUT UNION SELECT 'AUTOMNE' AS SAISON, dbo.F_AUTUMN_DATE(2000) AS DATE_DEBUT UNION SELECT 'HIVER' AS SAISON, dbo.F_WINTER_DATE(2000) AS DATE_DEBUT ORDER BY 2 /************************************************************ CONVERSION DE NOMBRE EN LITTERAUX : sous fonctions : F_NEC_20 : transformation des nombres de 1 &#224; 19 en litt&#233;raux F_NEC_100 : transformation des nombres de 20 &#224; 99 en litt&#233;raux F_NEC_0_100 : transformation des nombres de 0 &#224; 100 en litt&#233;raux fonction principale : F_NOMBRE_EN_CHIFFRE : transformation de n'importe quel nombre entier de l'intervalle [- 2 147 483 648 ; 2 147 483 647] ------------------------------------------------------------- Fr&#233;d&#233;ric BROUARD - SQLpro - 2004-08-07 - Transact SQL ************************************************************/ CREATE FUNCTION F_NEC_20 (@I INT) RETURNS VARCHAR(16) AS /****************************************************************************** * Fr&#233;d&#233;ric BROUARD - SQLpro - 2004-08-07 * * Sous proc&#233;dure de transformation des nombres de 1 &#224; 19 en litt&#233;raux * ******************************************************************************/ BEGIN DECLARE @RETVAL VARCHAR(256) SET @RETVAL = CASE WHEN @I=1 THEN 'UN' WHEN @I=2 THEN 'DEUX' WHEN @I=3 THEN 'TROIS' WHEN @I=4 THEN 'QUATRE' WHEN @I=5 THEN 'CINQ' WHEN @I=6 THEN 'SIX' WHEN @I=7 THEN 'SEPT' WHEN @I=8 THEN 'HUIT' WHEN @I=9 THEN 'NEUF' WHEN @I=10 THEN 'DIX' WHEN @I=11 THEN 'ONZE' WHEN @I=12 THEN 'DOUZE' WHEN @I=13 THEN 'TREIZE' WHEN @I=14 THEN 'QUATORZE' WHEN @I=15 THEN 'QUINZE' WHEN @I=16 THEN 'SEIZE' WHEN @I=17 THEN 'DIX-SEPT' WHEN @I=18 THEN 'DIX-HUIT' WHEN @I=19 THEN 'DIX-NEUF' END RETURN @RETVAL END GO CREATE FUNCTION F_NEC_100 (@I INT) RETURNS VARCHAR(32) AS /****************************************************************************** * Fr&#233;d&#233;ric BROUARD - SQLpro - 2004-08-07 * * Sous proc&#233;dure de transformation des nombres de 20 &#224; 99 en litt&#233;raux * ******************************************************************************/ BEGIN DECLARE @RETVAL VARCHAR(256) IF NOT(@I BETWEEN 20 AND 99) RETURN @RETVAL DECLARE @U CHAR(1) SET @U = SUBSTRING(CAST(@I AS CHAR(2)), 2, 1) SET @RETVAL = CASE WHEN @I = 20 THEN 'VINGT' WHEN @I = 21 THEN 'VINGT ET UN' WHEN @I BETWEEN 22 AND 29 THEN 'VING-' + dbo.F_NEC_20(CAST(@U AS INTEGER)) WHEN @I = 30 THEN 'TRENTE' WHEN @I = 31 THEN 'TRENTE ET UN' WHEN @I BETWEEN 32 AND 39 THEN 'TRENTE-' + dbo.F_NEC_20(CAST(@U AS INTEGER)) WHEN @I = 40 THEN 'QUARANTE' WHEN @I = 41 THEN 'QUARANTE ET UN' WHEN @I BETWEEN 42 AND 39 THEN 'QUARANTE-' + dbo.F_NEC_20(CAST(@U AS INTEGER)) WHEN @I = 50 THEN 'CINQUANTE' WHEN @I = 51 THEN 'CINQUANTE ET UN' WHEN @I BETWEEN 52 AND 59 THEN 'CINQUANTE-' + dbo.F_NEC_20(CAST(@U AS INTEGER)) WHEN @I = 60 THEN 'SOIXANTE' WHEN @I = 61 THEN 'SOIXANTE ET UN' WHEN @I BETWEEN 62 AND 69 THEN 'SOIXANTE-' + dbo.F_NEC_20(CAST(@U AS INTEGER)) WHEN @I = 70 THEN 'SOIXANTE-DIX' WHEN @I = 71 THEN 'SOIXANTE ET ONZE' WHEN @I BETWEEN 72 AND 79 THEN 'SOIXANTE-' + dbo.F_NEC_20(CAST(@U AS INTEGER)+10) WHEN @I = 80 THEN 'QUATRE-VINGT' WHEN @I BETWEEN 81 AND 89 THEN 'QUATRE-VINGT-' + dbo.F_NEC_20(CAST(@U AS INTEGER)) WHEN @I BETWEEN 90 AND 99 THEN 'QUATRE-VINGT-' + dbo.F_NEC_20(CAST(@U AS INTEGER)+10) END RETURN @RETVAL END GO CREATE FUNCTION F_NEC_0_100 (@I INT) RETURNS VARCHAR(256) AS /****************************************************************************** * Fr&#233;d&#233;ric BROUARD - SQlpro - 2004-08-07 * * Sous proc&#233;dure de transformation des nombres de 0 &#224; 100 en litt&#233;raux * ******************************************************************************/ BEGIN IF @I = 0 RETURN 'Z&#201;RO' IF @I BETWEEN 1 AND 19 RETURN dbo.F_NEC_20 (@I) IF @I BETWEEN 20 AND 99 RETURN dbo.F_NEC_100 (@I) IF @I = 100 RETURN 'CENT' RETURN '' END GO CREATE FUNCTION F_NOMBRE_EN_CHIFFRE (@I INTEGER) RETURNS VARCHAR(256) AS /****************************************************************************** * Fr&#233;d&#233;ric BROUARD - SQLpro - 2004-08-07 * * Fonction de transformation des nombres de 0 &#224; 2 147 483 647 en litt&#233;raux * ******************************************************************************/ BEGIN IF @I IS NULL RETURN NULL DECLARE @SIGN VARCHAR(5) IF @I &lt; 0 BEGIN SET @SIGN = 'MOINS' SET @I = -1 * @I END IF @I BETWEEN 0 AND 100 RETURN COALESCE(@SIGN + ' ', '') + dbo.F_NEC_0_100 (@I) -- le nombre est sup&#233;rieur &#224; 100 DECLARE @IS VARCHAR(10) SET @IS = CAST(@I AS VARCHAR(10)) WHILE LEN(@IS) &lt; 10 SET @IS = '0'+@IS DECLARE @D11 INT -- chiffres des unit&#233; et dizaine DECLARE @D100 INT -- chiffre des centaines DECLARE @D1000 INT -- chiffre des milliers DECLARE @D10000 INT -- chiffre des dix-milliers DECLARE @D100000 INT -- chiffre des cent-milliers DECLARE @D1000000 INT -- chiffre des millions DECLARE @D10000000 INT -- chiffre des dix-millions DECLARE @D100000000 INT -- chiffre des cent-millions DECLARE @D1000000000 INT -- chiffre des milliards SET @D11 = CAST(SUBSTRING(@IS, 9, 2) AS INTEGER) SET @D100 = CAST(SUBSTRING(@IS, 8, 1) AS INTEGER) SET @D1000 = CAST(SUBSTRING(@IS, 7, 1) AS INTEGER) SET @D10000 = CAST(SUBSTRING(@IS, 6, 1) AS INTEGER) SET @D100000 = CAST(SUBSTRING(@IS, 5, 1) AS INTEGER) SET @D1000000 = CAST(SUBSTRING(@IS, 4, 1) AS INTEGER) SET @D10000000 = CAST(SUBSTRING(@IS, 3, 1) AS INTEGER) SET @D100000000 = CAST(SUBSTRING(@IS, 2, 1) AS INTEGER) SET @D1000000000 = CAST(SUBSTRING(@IS, 1, 1) AS INTEGER) DECLARE @RETVAL VARCHAR(256) SET @RETVAL = '' -- traitement des milliards IF @D1000000000 &lt;&gt; 0 SET @RETVAL = @RETVAL + dbo.F_NEC_20 (@D1000000000)+' MILLIARD' -- traitement des millions IF @D100000000 = 1 SET @RETVAL = @RETVAL + ' CENT' IF @D100000000 &gt; 1 SET @RETVAL = @RETVAL + ' ' + dbo.F_NEC_20 (@D100000000) + ' CENT' -- exception de l's &#224; la centaine pure IF @D100000000 &gt; 1 AND @D10000000 + @D1000000 = 0 SET @RETVAL = @RETVAL + 'S' IF @D10000000 * 10 + @D1000000 &lt;&gt; 0 SET @RETVAL = @RETVAL + ' ' + dbo.F_NEC_0_100 (@D10000000 * 10 + @D1000000) IF @D100000000 * 100 + @D10000000 * 10 + @D1000000 &lt;&gt; 0 SET @RETVAL = @RETVAL + ' MILLION' -- traitement des milliers IF @D100000 = 1 SET @RETVAL = @RETVAL + ' CENT' IF @D100000 &gt; 1 SET @RETVAL = @RETVAL + ' ' + dbo.F_NEC_20 (@D100000) + ' CENT' -- exception de l's &#224; la centaine pure IF @D100000 &gt; 1 AND @D10000 = 0 AND @D1000 = 0 SET @RETVAL = @RETVAL + 'S' IF @D10000 * 10 + @D1000 &lt;&gt; 0 SET @RETVAL = @RETVAL + ' ' + dbo.F_NEC_0_100 (@D10000 * 10 + @D1000) IF @D100000 * 100 + @D10000 * 10 + @D1000 &lt;&gt; 0 SET @RETVAL = ' ' + @RETVAL + ' MILLE' -- traitement des centaines IF @D100 &gt; 1 SET @RETVAL = @RETVAL + ' ' + dbo.F_NEC_20 (@D100) IF @D100 &gt; 0 SET @RETVAL = @RETVAL + ' CENT' -- exception de l's &#224; la centaine pure IF @D100 &gt; 1 AND @D11 = 0 SET @RETVAL = @RETVAL + 'S' IF @D11 &lt;&gt; 0 SET @RETVAL = @RETVAL + ' ' + dbo.F_NEC_0_100(@D11) RETURN COALESCE(@SIGN + ' ', '') + LTRIM(@RETVAL) END GO -- exemple d'utilisation SELECT dbo.F_NOMBRE_EN_CHIFFRE(-2111623500) AS NOMBRE_EN_LETTRE CREATE FUNCTION F_STORAGE_SIZE_KB (@TABLE_NAME VARCHAR(128), @NATURE CHAR(1)) RETURNS BIGINT AS /****************************************************************************** Obtention de la taille des informations stock&#233;es pour une table sp&#233;cifique ******************************************************************************* Fr&#233;d&#233;ric BROUARD - SQLpro - 2004-08-11 ******************************************************************************* ATTENTION, ces donn&#233;es sont bas&#233;es sur les informations contenues dans les tables syst&#232;mes de descriptions des fichiers. Ces tables ne sont pas forc&#233;ment toujours &#224; jour au moment de l'ex&#233;cution de la fonction. Pour s'assurer de l'exactitude des informations, veuillez proc&#233;der pr&#233;alablement &#224; l'ex&#233;cution de la commande DBCC UPDATEUSAGE pour la table sp&#233;cifi&#233;e ******************************************************************************* FONCTIONNEMENT : (exemples) 1) SELECT dbo.F_STORAGE_SIZE_KB ('MaTable', 'I') =&gt; donne le cout de stockage en kilo octets des index de la table MaTable 2) SELECT dbo.F_STORAGE_SIZE_KB ('MaTable', 'D') =&gt; donne le cout de stockage en kilo octets des donn&#233;es de la table MaTable 3) SELECT dbo.F_STORAGE_SIZE_KB ('MaTable', '') =&gt; donne le cout de stockage en kilo octets des donn&#233;es et index de la table MaTable ******************************************************************************/ BEGIN IF @TABLE_NAME IS NULL RETURN NULL IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TABLE_NAME AND TABLE_TYPE = 'BASE TABLE') RETURN NULL DECLARE @id INT declare @DATA_SIZE BIGINT declare @INDX_SIZE BIGINT SELECT @id = id FROM sysobjects WHERE name = @TABLE_NAME IF @id IS NULL RETURN NULL SET @DATA_SIZE = 0 SET @INDX_SIZE = 0 -- la taille des donn&#233;es d'un objet set @DATA_SIZE = (SELECT SUM(dpages) FROM sysindexes WHERE indid &lt; 2 AND id = @id) + (SELECT COALESCE(sum(used), 0) FROM sysindexes WHERE indid = 255 AND id = @id) -- la taille des index d'un objet set @INDX_SIZE = (SELECT sum(used) FROM sysindexes WHERE indid in (0, 1, 255) AND id = @id) - @DATA_SIZE IF @NATURE = 'I' SET @DATA_SIZE = 0 IF @NATURE = 'D' SET @INDX_SIZE = 0 -- cooroboration avec les unit&#233;s de mesure physique de stockage du syst&#232;me SELECT @DATA_SIZE = (@DATA_SIZE + @INDX_SIZE) * low / 1024.0 FROM master.dbo.spt_values WHERE number = 1 AND type = 'E' RETURN @DATA_SIZE END GO CREATE FUNCTION F_DROP_CHARS (@DATA VARCHAR(128), @CHARS_TO_DROP VARCHAR(220)) RETURNS VARCHAR(128) AS /****************************************************************************** Suppression de caract&#232;res dans une chaine de caract&#232;res ******************************************************************************* Fr&#233;d&#233;ric BROUARD - SQlpro - 2004-08-11 ******************************************************************************* La fonction F_DROP_CHARS supprime tous les caract&#232;res contenus dans la chaine de caract&#232;res @CHARS_TO_DROP au sein de la chaine @DATA. Exemple : SELECT dbo.F_DROP_CHARS('Locomotive', 'lot') =&gt; Lcmive ******************************************************************************/ BEGIN IF @DATA IS NULL OR @CHARS_TO_DROP IS NULL RETURN NULL IF @DATA = '' RETURN '' IF @CHARS_TO_DROP = '' RETURN @DATA DECLARE @NEW_DATA VARCHAR(128) SET @NEW_DATA = '' DECLARE @I INT SET @I = 1 DECLARE @C CHAR(1) WHILE @I &lt;= LEN(@DATA) BEGIN SET @C = SUBSTRING(@DATA, @I, 1) IF CHARINDEX(@C, @CHARS_TO_DROP) = 0 SET @NEW_DATA = @NEW_DATA + @C SET @I = @I +1 END RETURN @NEW_DATA END GO CREATE VIEW V_DATEHEURE_COURANTE AS SELECT CURRENT_TIMESTAMP AS DATEHEURE_COURANTE GO CREATE FUNCTION F_DATE_HEURE_FORMAT_COMPACT () RETURNS CHAR(16) AS /****************************************************************************** Obtention d'une dateheure au format compact AAAAMMJJHHMMSS ******************************************************************************* Fr&#233;d&#233;ric BROUARD - sqlpro - 2004-08-11 ******************************************************************************* NOTA : cette fonction est bas&#233;e sur la vue V_DATEHEURE_COURANTE impl&#233;ment&#233;e ci dessus. ******************************************************************************/ BEGIN DECLARE @DH CHAR(16) SELECT @DH = CONVERT(CHAR(8), DATEHEURE_COURANTE, 112) + REPLACE(CONVERT(CHAR(8), DATEHEURE_COURANTE, 108), ':', '') FROM V_DATEHEURE_COURANTE RETURN @DH END GO /****************************************************************************** Recherche de correspondance de cha&#238;ne bas&#233; sur les expressions r&#233;guli&#232;res ******************************************************************************* Fr&#233;d&#233;ric BROUARD - sqlpro - 2004-08-11 ******************************************************************************* NOTA : cette se comporte &#224; la mani&#232;re du pr&#233;dicat SIMILAR de la norme SQL:1999 qui simule un REGEX. Elle utilise des appels OLE &#224; un REGEX &#233;crit en VB script et disponible sur toutes les &#233;ditions de Windows ******************************************************************************/ CREATE FUNCTION dbo.F_REGEXMATCH (@MOTIF VARCHAR(256), @VALEUR VARCHAR(8000), @NOCASSE BIT) RETURNS int AS BEGIN declare @OLE_OBJECT int, @RETVAL int, @MATCH bit set @MATCH=0 exec @RETVAL=sp_OACreate 'VBScript.RegExp',@OLE_OBJECT OUT IF (@RETVAL &lt;&gt; 0) RETURN NULL exec @RETVAL=sp_OASetProperty @OLE_OBJECT, 'Pattern', @MOTIF IF (@RETVAL &lt;&gt; 0) RETURN NULL exec @RETVAL=sp_OASetProperty @OLE_OBJECT, 'IgnoreCase', @NOCASSE IF (@RETVAL &lt;&gt; 0) RETURN NULL exec @RETVAL=sp_OAMethod @OLE_OBJECT, 'Test',@MATCH OUT, @VALEUR IF (@RETVAL &lt;&gt; 0) RETURN NULL exec @RETVAL=sp_OADestroy @OLE_OBJECT return @MATCH END GO -- exemple : liste de tous les clients dont le nom commence avec la lettre &#034;g&#034; -- avec respect de la casse SELECT * FROM DB_HOTEL.dbo.T_CLIENT WHERE dbo.F_REGEXMATCH('g.*', CLI_NOM, 0) &lt;&gt; 0 -- sans respect de la casse SELECT * FROM DB_HOTEL.dbo.T_CLIENT WHERE dbo.F_REGEXMATCH('g.*', CLI_NOM, 1) &lt;&gt; 0&lt;/textarea&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Norme de d&#233;veloppement</title>
		<link>https://www.sqlspot.com/Norme-de-developpement.html</link>
		<guid isPermaLink="true">https://www.sqlspot.com/Norme-de-developpement.html</guid>
		<dc:date>2007-11-25T22:32:24Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		
		



		<description>&lt;p&gt;Une norme de d&#233;veloppement est un outil indispensable pour la coh&#233;sion des &#233;quipes comme pour la productivit&#233;. Exemple d'une norme de d&#233;veloppement ax&#233;e &#171; base de donn&#233;es &#187;.&lt;/p&gt;

-
&lt;a href="https://www.sqlspot.com/-Ressources-SQL-.html" rel="directory"&gt;Ressources SQL&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Une norme de d&#233;veloppement est un outil indispensable pour l'efficacit&#233; des &#233;quipes de d&#233;veloppement. Elle &#224; pour but d'uniformiser la communication entre les diff&#233;rents intervenants susceptibles de travailler &#224; un projet informatique utilisant une base de donn&#233;es relationelle.
Cet article d&#233;crit une norme interne d'entreprise dont l'&#233;tendue va du mod&#232;le conceptuel &#224; l'&#233;criture du code &#171; base de donn&#233;es &#187; en passant par la sructuration des tables et des vues.&lt;/p&gt;
&lt;div class='spip_document_55 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;40&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/pdf/Norme_de_developpement_BD.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 364.3 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-55 '&gt;&lt;strong&gt;Norme de d&#233;veloppement base de donn&#233;es
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;D'autres ressources sur le sujet par SQLpro sur &lt;a href=&#034;http://sqlpro.developpez.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;developpez.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Calcul de la m&#233;diane en SQL</title>
		<link>https://www.sqlspot.com/Calcul-de-la-mediane-en-SQL.html</link>
		<guid isPermaLink="true">https://www.sqlspot.com/Calcul-de-la-mediane-en-SQL.html</guid>
		<dc:date>2007-11-07T00:16:15Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		
		



		<description>&lt;p&gt;La calcul d'une m&#233;diane statistique par une requ&#234;te SQL est-il facile ? R&#233;ponse &#8230; oui et non !&lt;/p&gt;

-
&lt;a href="https://www.sqlspot.com/-Ressources-SQL-.html" rel="directory"&gt;Ressources SQL&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Le calcul de la m&#233;diane statistique est un probl&#232;me bien plus ardu qu'il n'y parait avec SQL et rel&#232;ve de nombreux pi&#232;ges. Voici une &#233;tude compl&#232;te sur le sujet afin de rendre compr&#233;hensible diff&#233;rents cas de figure.&lt;/p&gt;
&lt;div class='spip_document_52 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;29&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/pdf/LaMedianeEnSQL.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 277 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-52 '&gt;&lt;strong&gt;Calcul de la m&#233;diane en SQL
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_53 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;30&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/zip/sql.zip' class=&#034; spip_doc_lien&#034; title='Zip - 2.1 kio' type=&#034;application/zip&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/zip-f045b.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-53 '&gt;&lt;strong&gt;Code SQL associ&#233; &#224; l'article
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;D'autres ressources sur le sujet par SQLpro sur &lt;a href=&#034;http://sqlpro.developpez.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;developpez.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Les contraintes dans les bases de donn&#233;es relationnelles</title>
		<link>https://www.sqlspot.com/Les-contraintes-dans-les-bases-de-donnees-relationnelles.html</link>
		<guid isPermaLink="true">https://www.sqlspot.com/Les-contraintes-dans-les-bases-de-donnees-relationnelles.html</guid>
		<dc:date>2007-11-05T14:32:32Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		
		



		<description>&lt;p&gt;Panorama rapide et complet des diff&#233;rentes contraintes SQL et de leur usage.&lt;/p&gt;

-
&lt;a href="https://www.sqlspot.com/-Ressources-SQL-.html" rel="directory"&gt;Ressources SQL&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;L'une des id&#233;es force de la conception des bases de donn&#233;es relationnelles repose sur la notion de contrainte. Une contrainte n'est autre qu'une r&#232;gle imp&#233;rative ne devant en aucun cas &#234;tre viol&#233;e. Certaines contraintes sont le reflet du mod&#232;le de donn&#233;es et permettent d'assurer la coh&#233;rence fonctionnelle des relations entre les tables. D'autres assurent que les donn&#233;es saisies correspondent bien aux limites de l'univers que l'on mod&#233;lise. Enfin, les r&#232;gles &#171; m&#233;tiers &#187;, c'est &#224; dire le fonctionnel applicatif, n&#233;cessite la mise en &#339;uvre de contraintes compl&#233;mentaires souvent complexes. Mais, si toutes les contraintes s'av&#232;rent n&#233;cessaires, elle sont souvent mal comprise, tr&#232;s souvent mal g&#233;r&#233;es dans les processus de d&#233;veloppement, et se voient donc souvent rel&#233;gu&#233;es, voire abandonn&#233;es.
Cet article &#224; pour but de vous montrer l'int&#233;r&#234;t des contraintes SQL avec des exemples concret de leur utilit&#233;.&lt;/p&gt;
&lt;div class='spip_document_50 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;52&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/pdf/BasesDeDonneesRelationnellesEtContraintesSQL.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 334.5 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-50 '&gt;&lt;strong&gt;Bases de donn&#233;es relationnelles et contraintes SQL
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_51 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;30&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/zip/CodeSQLContraintes.zip' class=&#034; spip_doc_lien&#034; title='Zip - 2 kio' type=&#034;application/zip&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/zip-f045b.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-51 '&gt;&lt;strong&gt;Code SQL associ&#233; &#224; l'article
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;D'autres ressources sur le sujet par SQLpro sur &lt;a href=&#034;http://sqlpro.developpez.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;developpez.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>INDEXATION : une &#233;tude par l'exemple&#8230;</title>
		<link>https://www.sqlspot.com/INDEXATION-une-etude-par-l-exemple.html</link>
		<guid isPermaLink="true">https://www.sqlspot.com/INDEXATION-une-etude-par-l-exemple.html</guid>
		<dc:date>2007-11-04T23:40:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		
		



		<description>&lt;p&gt;L'indexation d'une base de donn&#233;es est un processus important et n&#233;cessaire h&#233;las souvent mal maitris&#233;. Voici une spectaculaire &#233;tude par l'exemple&#8230;&lt;/p&gt;

-
&lt;a href="https://www.sqlspot.com/-Ressources-SQL-.html" rel="directory"&gt;Ressources SQL&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;La pr&#233;sente &#233;tude permet de comprendre l'int&#233;r&#234;t de l'indexation, le gain qu'elle apporte et les techniques &#224; mettre en &#339;uvre.
Pour plus d'int&#233;r&#234;t, nous verrons une d&#233;monstration spectaculaire au cours de laquelle nous passerons d'un co&#251;t de requ&#234;te de 96 000 avec un mod&#232;le non index&#233; &#224; un co&#251;t de 2&#8230; soit un gain de 48 000.
Bien entendu il s'agit d'un cas d'&#233;cole, mais formateur en diable !
Exemples avec MS SQL Server&#8230;&lt;/p&gt;
&lt;div class='spip_document_43 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;36&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/pdf/ComparaisonRequetesIndexation_2.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 958.4 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-43 '&gt;&lt;strong&gt;&#201;tude d'indexation avec SQL Server
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_44 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;30&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/zip/EtudeIndexation-2.zip' class=&#034; spip_doc_lien&#034; title='Zip - 597 kio' type=&#034;application/zip&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/zip-f045b.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-44 '&gt;&lt;strong&gt;Code SQL associ&#233; &#224; l'article
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;D'autres ressources sur le sujet par SQLpro sur &lt;a href=&#034;http://sqlpro.developpez.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;developpez.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Les transactions imbriqu&#233;es</title>
		<link>https://www.sqlspot.com/Les-transactions-imbriquees.html</link>
		<guid isPermaLink="true">https://www.sqlspot.com/Les-transactions-imbriquees.html</guid>
		<dc:date>2007-11-04T17:31:35Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		
		



		<description>&lt;p&gt;Cet article explique ce que sont les transactions imbriqu&#233;es et pr&#233;sente une mani&#232;re de les g&#233;rer le plus proprement possible&lt;/p&gt;

-
&lt;a href="https://www.sqlspot.com/-Ressources-SQL-.html" rel="directory"&gt;Ressources SQL&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Une grosse difficult&#233; qui attendent les d&#233;veloppeurs est de savoir comment piloter les transactions d&#232;s lors que celle-ci s'emboitent les unes dans les autres notamment lors des appels de proc&#233;dures stock&#233;es. C'est ce que l'on appelle les &lt;strong&gt;transactions imbriqu&#233;es&lt;/strong&gt;. Cet article pr&#233;sente sommairement la difficult&#233; et le moyen de g&#233;rer le plus proprement possible de telles transactions dans le cadre d'un d&#233;veloppement recourant g&#233;n&#233;reusement aux proc&#233;dures stock&#233;es et aux transactions&#8230;&lt;/p&gt;
&lt;div class='spip_document_49 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;29&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/pdf/Transactions_imbriquees-2.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 204.8 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-49 '&gt;&lt;strong&gt;Les transactions imbriqu&#233;es
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_40 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;30&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/zip/TransactionImbriqueesCodeSQL.zip' class=&#034; spip_doc_lien&#034; title='Zip - 1 kio' type=&#034;application/zip&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/zip-f045b.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-40 '&gt;&lt;strong&gt;Code SQL associ&#233; &#224; l'article
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;D'autres ressources sur le sujet par SQLpro sur &lt;a href=&#034;http://sqlpro.developpez.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;developpez.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Decouvrez SQL Server 2005</title>
		<link>https://www.sqlspot.com/Decouvrez-SQL-Server-2005.html</link>
		<guid isPermaLink="true">https://www.sqlspot.com/Decouvrez-SQL-Server-2005.html</guid>
		<dc:date>2007-11-04T16:01:10Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		
		



		<description>&lt;p&gt;Cet article fait le point sur les apports majeurs de SQL Server 2005 compar&#233; aux versions pr&#233;c&#233;dentes&lt;/p&gt;

-
&lt;a href="https://www.sqlspot.com/-Ressources-SQL-.html" rel="directory"&gt;Ressources SQL&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class='spip_document_31 spip_document spip_documents spip_document_image spip_documents_center spip_document_center'&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L252xH62/Logoltree-ff19c.gif?1669025547' width='252' height='62' alt='' title='' /&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Microsoft SQL Server 2005 est une version majeure du SGBD relationnel de Microsoft. Il apporte de nombreuses fonctionalit&#233;s nouvelles tant sur le plan du d&#233;veloppement que de l'administration.
Les axes majeurs sur lesquels repose cette version sont :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; les VLDB&lt;/li&gt;&lt;li&gt; le web&lt;/li&gt;&lt;li&gt; l'analyse multidimensionnelle (OLAP)&lt;/li&gt;&lt;li&gt; les bases de donn&#233;es r&#233;parties&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Voici donc un article qui fait le point &#224; ce sujet.&lt;/p&gt;
&lt;div class='spip_document_46 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;35&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/pdf/SQL_Server_2005pourLentreprise.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 486.1 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-46 '&gt;&lt;strong&gt;SQL Server 2005 pour l'entreprise
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class='spip_document_33 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;30&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://www.sqlspot.com/sites/sqlspot.com/IMG/zip/SQL2005.zip' class=&#034; spip_doc_lien&#034; title='Zip - 2 kio' type=&#034;application/zip&#034;&gt;&lt;img src='https://www.sqlspot.com/sites/sqlspot.com/local/cache-vignettes/L64xH64/zip-f045b.svg?1669018299' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-33 '&gt;&lt;strong&gt;Exemples associ&#233; au document
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;NOTA&lt;/strong&gt; : cet article a &#233;t&#233; &#233;crit pour Learning Tree France puis traduit en anglais pour Learning Tree International. &lt;a href=&#034;http://whitepaper.learningtree.com/myltre/modules/praddnew.aspx?dl=sqlserver2005.pdf&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;La version US&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;D'autres ressources sur le sujet par SQLpro sur &lt;a href=&#034;http://sqlpro.developpez.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;developpez.com&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>



</channel>

</rss>