<?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>Pablo Viale &#187; SQL (mySQL)</title>
	<atom:link href="http://www.viale.mx/index.php/category/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.viale.mx</link>
	<description>Consejos para diseño y desarrollo de aplicaciones web</description>
	<lastBuildDate>Wed, 29 Jun 2011 22:18:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>BC30002: Type &#8216;System.Data.Linq.Mapping.DatabaseAttribute&#8217; is not defined.</title>
		<link>http://www.viale.mx/2011/06/29/bc30002-type-system-data-linq-mapping-databaseattribute-is-not-defined/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=bc30002-type-system-data-linq-mapping-databaseattribute-is-not-defined</link>
		<comments>http://www.viale.mx/2011/06/29/bc30002-type-system-data-linq-mapping-databaseattribute-is-not-defined/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 22:18:01 +0000</pubDate>
		<dc:creator>Pablo Viale</dc:creator>
				<category><![CDATA[ASP.NET 2.0 / 3.5]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[SQL (mySQL)]]></category>

		<guid isPermaLink="false">http://www.viale.mx/?p=549</guid>
		<description><![CDATA[Si estás utilizando LINQ en tu aplicación de asp.net y te sale este error: BC30002: Type 'System.Data.Linq.Mapping.DatabaseAttribute' is not defined. Es probable que no hayas hecho referencia del assembly en el archivo web.config. Entre el tag assemblies y /assemblies de tu archivo web.config coloca lo siguiente: Clic para mostrar texto plano XML: &#60;add assembly="System.Data.Linq, Version=3.5.0.0, [...]]]></description>
			<content:encoded><![CDATA[<p>Si estás utilizando LINQ en tu aplicación de asp.net y te sale este error:</p>
<p><code>BC30002: Type 'System.Data.Linq.Mapping.DatabaseAttribute' is not defined.</code></p>
<p>Es probable que no hayas hecho referencia del assembly en el archivo web.config.<br />
Entre el tag assemblies y /assemblies de tu archivo web.config coloca lo siguiente:</p>
<div class="igBar"><span id="lxml-2"><a href="#" onclick="javascript:showPlainTxt('xml-2'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">XML:</span>
<div id="xml-2">
<div class="xml">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;add</span> <span style="color: #000066;">assembly</span>=<span style="color: #ff0000;">"System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"</span><span style="font-weight: bold; color: black;">/&gt;</span></span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>¡Suerte!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.viale.mx/2011/06/29/bc30002-type-system-data-linq-mapping-databaseattribute-is-not-defined/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Table &#8216;prueba&#8217; is marked as crashed and should be repaired</title>
		<link>http://www.viale.mx/2010/06/07/table-prueba-is-marked-as-crashed-and-should-be-repaired/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=table-prueba-is-marked-as-crashed-and-should-be-repaired</link>
		<comments>http://www.viale.mx/2010/06/07/table-prueba-is-marked-as-crashed-and-should-be-repaired/#comments</comments>
		<pubDate>Mon, 07 Jun 2010 17:01:41 +0000</pubDate>
		<dc:creator>Pablo Viale</dc:creator>
				<category><![CDATA[SQL (mySQL)]]></category>

		<guid isPermaLink="false">http://www.viale.mx/?p=435</guid>
		<description><![CDATA[En ocasiones se te puede presentar el siguiente error en una tabla de una base de datos de MySQL: Table 'prueba' is marked as crashed and should be repaired Para repararlo, abre un command prompt de Windows y cámbiate al directorio donde tienes instalado MySQL, y luego al directorio "bin". Es en este directorio donde [...]]]></description>
			<content:encoded><![CDATA[<p>En ocasiones se te puede presentar el siguiente error en una tabla de una base de datos de MySQL:</p>
<p><code>Table 'prueba' is marked as crashed and should be repaired</code></p>
<p>Para repararlo, abre un <code>command prompt</code> de Windows y cámbiate al directorio donde tienes instalado MySQL, y luego al directorio "bin". Es en este directorio donde están todos los comandos de MySQL.</p>
<p><code>cd "C:\Program Files\MySQL\bin\"</code></p>
<p>Después ejecuta el comando "myisamchk" sobre la tabla que se dañó:</p>
<p><code>bin&gt;myisamchk "bdprueba\prueba.myi"<br />
Checking MyISAM file: bdprueba\prueba.myi<br />
Data records:   34548   Deleted blocks:       0<br />
myisamchk: warning: Table is marked as crashed and last repair failed<br />
myisamchk: warning: 1 client is using or hasn't closed the table properly<br />
- check file-size<br />
myisamchk: error: Size of datafile is: 8936628           Should be: 8936696<br />
- check record delete-chain<br />
- check key delete-chain<br />
- check index reference<br />
- check data record references index: 1<br />
- check record links<br />
myisamchk: error: got error: 120 when reading datafile at record: 34548<br />
MyISAM-table 'bdprueba\prueba.myi' is corrupted<br />
Fix it using switch "-r" or "-o"</code></p>
<p>Como puedes ver, nos está marcando un error, ahora para repararlo utiliza "-r":</p>
<p><code>bin&gt;myisamchk "bdprueba\prueba.myi" -r<br />
- recovering (with sort) MyISAM-table 'bdprueba\prueba.myi'<br />
Data records: 34548<br />
- Fixing index 1<br />
Found link that points at 8936628 (outside data file) at 8924612<br />
Found block that points outside data file at 8924740<br />
Data records: 34576</code></p>
<p>Y si corres nuevamente el primer comando, verás como ya no te aparece el error:</p>
<p><code>bin&gt;myisamchk "bdprueba\prueba.myi"<br />
Checking MyISAM file: bdprueba\prueba.myi<br />
Data records:   34576   Deleted blocks:       0<br />
- check file-size<br />
- check record delete-chain<br />
- check key delete-chain<br />
- check index reference<br />
- check data record references index: 1<br />
- check record links</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.viale.mx/2010/06/07/table-prueba-is-marked-as-crashed-and-should-be-repaired/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo remplazar un string en una tabla de MySql</title>
		<link>http://www.viale.mx/2009/05/04/como-remplazar-un-string-en-una-tabla-de-mysql/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=como-remplazar-un-string-en-una-tabla-de-mysql</link>
		<comments>http://www.viale.mx/2009/05/04/como-remplazar-un-string-en-una-tabla-de-mysql/#comments</comments>
		<pubDate>Mon, 04 May 2009 18:46:39 +0000</pubDate>
		<dc:creator>Pablo Viale</dc:creator>
				<category><![CDATA[SQL (mySQL)]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.viale.com.mx/?p=335</guid>
		<description><![CDATA[Recientemente cambié el dominio de mi blog de WordPress (antes era recursosweb.com.mx y ahora es viale.com.mx), por lo que muchas de las imágenes ahora no abren, mostrando una "x" roja. Las ligas también están rotas por esta misma razón. Tengo que entrar a cada post y modificar el dominio viejo por el dominio actual. Como [...]]]></description>
			<content:encoded><![CDATA[<p>Recientemente cambié el dominio de mi blog de WordPress (antes era recursosweb.com.mx y ahora es viale.com.mx), por lo que muchas de las imágenes ahora no abren, mostrando una "x" roja. Las ligas también están rotas por esta misma razón.</p>
<p>Tengo que entrar a cada post y modificar el dominio viejo por el dominio actual.  Como son muchas, hacerlo manualmente no es una opción.</p>
<p>Existe una función de <code>MySql</code> que permite hacer esto, esta función se llama <code>Replace</code> y se usa de la siguiente forma:</p>
<div class="igBar"><span id="lsql-6"><a href="#" onclick="javascript:showPlainTxt('sql-6'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-6">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">UPDATE</span> NombreDeLaTabla <span style="color: #993333; font-weight: bold;">SET</span> NombreDelCampo = <span style="color: #993333; font-weight: bold;">REPLACE</span><span style="color:#006600; font-weight:bold;">&#40;</span>NombreDelCampo,<span style="color: #ff0000;">"TextoOriginal"</span>,<span style="color: #ff0000;">"TextoNuevo"</span><span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Así que para resolver mi problema utilice la siguiente sentencia:</p>
<div class="igBar"><span id="lsql-7"><a href="#" onclick="javascript:showPlainTxt('sql-7'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-7">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">UPDATE</span> <span style="color: #ff0000;">`wp_posts`</span> <span style="color: #993333; font-weight: bold;">SET</span> <span style="color: #ff0000;">`post_content`</span> = <span style="color: #993333; font-weight: bold;">REPLACE</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">`post_content`</span>,<span style="color: #ff0000;">"http://www.recursosweb.com.mx"</span>,<span style="color: #ff0000;">"http://www.viale.com.mx"</span><span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Y después esta otra:</p>
<div class="igBar"><span id="lsql-8"><a href="#" onclick="javascript:showPlainTxt('sql-8'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-8">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">UPDATE</span> <span style="color: #ff0000;">`wp_posts`</span> <span style="color: #993333; font-weight: bold;">SET</span> <span style="color: #ff0000;">`guid`</span> = <span style="color: #993333; font-weight: bold;">REPLACE</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">`guid`</span>,<span style="color: #ff0000;">"http://www.recursosweb.com.mx"</span>,<span style="color: #ff0000;">"http://www.viale.com.mx"</span><span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Y listo, problema solucionado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.viale.mx/2009/05/04/como-remplazar-un-string-en-una-tabla-de-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error Your PHP installation appears to be missing the MySQL extension which is required by WordPress</title>
		<link>http://www.viale.mx/2009/01/25/error-your-php-installation-appears-to-be-missing-the-mysql-extension-which-is-required-by-wordpress/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=error-your-php-installation-appears-to-be-missing-the-mysql-extension-which-is-required-by-wordpress</link>
		<comments>http://www.viale.mx/2009/01/25/error-your-php-installation-appears-to-be-missing-the-mysql-extension-which-is-required-by-wordpress/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 09:03:46 +0000</pubDate>
		<dc:creator>Pablo Viale</dc:creator>
				<category><![CDATA[SQL (mySQL)]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.viale.com.mx/?p=291</guid>
		<description><![CDATA[Instalé WordPress en un nuevo servidor y me salía el error: Your PHP installation appears to be missing the MySQL extension which is required by WordPress. Revisé todos los pasos de configuración que aparecen en esta liga: http://wordpress.org/support/topic/154730 sin éxito. Al final, gracias a esta otra liga: me di cuenta que para resolver el problema [...]]]></description>
			<content:encoded><![CDATA[<p>Instalé WordPress en un nuevo servidor y me salía el error:</p>
<p><code>Your PHP installation appears to be missing the MySQL extension which is required by WordPress.</code></p>
<p>Revisé todos los pasos de configuración que aparecen en esta liga:</p>
<p><a href="http://wordpress.org/support/topic/154730">http://wordpress.org/support/topic/154730</a></p>
<p>sin éxito. </p>
<p>Al final, gracias a esta otra liga:<br />
<a href="http://www.kemponline.co.uk/archive/2008/03/26/your-php-installation-appears-to-be-missing-the-mysql-which.aspx"></a></p>
<p>me di cuenta que para resolver el problema lo único que había que hacer era copiar el archivo <code>libmysql.dll</code> a la carpeta <code>c:\windows\system32</code>.  Por alguna razón el sistema operativo no lo reconoce estando en <code>c:\php\ext</code>.</p>
<p>Espero que esto le sirva a alguien.</p>
<p> <img src='http://www.viale.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.viale.mx/2009/01/25/error-your-php-installation-appears-to-be-missing-the-mysql-extension-which-is-required-by-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Los campos insertados se truncan en 1024 caracteres</title>
		<link>http://www.viale.mx/2007/06/20/los-campos-insertados-se-truncan-en-1024-caracteres/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=los-campos-insertados-se-truncan-en-1024-caracteres</link>
		<comments>http://www.viale.mx/2007/06/20/los-campos-insertados-se-truncan-en-1024-caracteres/#comments</comments>
		<pubDate>Wed, 20 Jun 2007 17:40:31 +0000</pubDate>
		<dc:creator>Pablo Viale</dc:creator>
				<category><![CDATA[ASP.NET 2.0 / 3.5]]></category>
		<category><![CDATA[SQL (mySQL)]]></category>

		<guid isPermaLink="false">http://www.viale.com.mx/2007/06/20/los-campos-insertados-se-truncan-en-1024-caracteres/</guid>
		<description><![CDATA[Al crear un TableAdapter en una aplicación de ASP.NET 2 usando Visual Web Developer 2005 Express, se establecen algunos límites que no son obvios a primera vista. En un proyecto en el que trabajo tengo una base de datos en MySQL con un campo llamado Cuerpo que es de tipo longtext y está diseñado para [...]]]></description>
			<content:encoded><![CDATA[<p>Al crear un TableAdapter en una aplicación de ASP.NET 2 usando Visual Web Developer 2005 Express, se establecen algunos límites que no son obvios a primera vista.</p>
<p>En un proyecto en el que trabajo tengo una base de datos en MySQL con un campo llamado <code>Cuerpo</code> que es de tipo <code>longtext</code> y está diseñado para que pueda almacenar varios párrafos de <code>HTML</code>.</p>
<p>Al crear el <code>TableAdapter</code> y el <code>Business Logic</code> uno nunca establece los tamaños de los campos, ya que la herramienta lo hace por uno mismo.</p>
<p>En mi caso, al insertar un registro mediante mi aplicación, el campo <code>Cuerpo</code> se truncaba, almacenando únicamente alrededor de 1000 o 1024 caracteres.</p>
<p>Mi primera idea fue ir a revisar mi tabla de MySQL, pero el límite no estaba ahí.  En seguida fui a ver las propiedades de la tabla en el <code>TableAdapter</code> de mi aplicación:</p>
<p><a href='http://www.viale.com.mx/wp-content/uploads/2007/06/limite0.gif' title='Propiedades'><img src='http://www.viale.com.mx/wp-content/uploads/2007/06/limite0.gif' alt='Propiedades' /></a></p>
<p>Como puedes ver, el <code>MaxLength</code> del campo en cuestión estaba establecido en 60,000, así que tampoco estaba ahí el problema.  Después de un rato de darle vueltas al asunto, se me ocurrió ver las propiedades de la sentencia que hacía el <code>insert</code> en la base de datos, la cual en mi ejemplo se llama <code>InsertaEnvio</code>.  Solamente hay que seleccionarla y oprimir el pequeño botón con tres puntos:</p>
<p><a href='http://www.viale.com.mx/wp-content/uploads/2007/06/limite1.gif' title='TableAdapter'><img src='http://www.viale.com.mx/wp-content/uploads/2007/06/limite1.gif' alt='TableAdapter' /></a></p>
<p>Se mostrará la ventana de propiedades de la sentencia SQL.  Seleccioné el campo problemático, y noté que en la propiedad <code>Size</code> tenía un valor de 1024:</p>
<p><a href='http://www.viale.com.mx/wp-content/uploads/2007/06/limite2.gif' title='Tamano del campo'><img src='http://www.viale.com.mx/wp-content/uploads/2007/06/limite2.gif' alt='Tamano del campo' /></a></p>
<p>Listo, ahí estaba el error, solamente lo modifiqué a un valor lo suficientemente grande:</p>
<p><a href='http://www.viale.com.mx/wp-content/uploads/2007/06/limite3.gif' title='Tamano modificado'><img src='http://www.viale.com.mx/wp-content/uploads/2007/06/limite3.gif' alt='Tamano modificado' /></a></p>
<p>Salve el archivo <code>xsd</code>, probé nuevamente, y el problema desapareció.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.viale.mx/2007/06/20/los-campos-insertados-se-truncan-en-1024-caracteres/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL que encuentra coincidencias de un string sin usar LIKE en un .XSD de ASP.NET 2</title>
		<link>http://www.viale.mx/2007/05/31/sql-que-encuentra-coincidencias-de-un-string-sin-usar-like-en-un-xsd-de-aspnet-2/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sql-que-encuentra-coincidencias-de-un-string-sin-usar-like-en-un-xsd-de-aspnet-2</link>
		<comments>http://www.viale.mx/2007/05/31/sql-que-encuentra-coincidencias-de-un-string-sin-usar-like-en-un-xsd-de-aspnet-2/#comments</comments>
		<pubDate>Thu, 31 May 2007 18:30:06 +0000</pubDate>
		<dc:creator>Pablo Viale</dc:creator>
				<category><![CDATA[ASP.NET 2.0 / 3.5]]></category>
		<category><![CDATA[SQL (mySQL)]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.viale.com.mx/2007/05/31/sql-que-encuentra-coincidencias-de-un-string-sin-usar-like-en-un-xsd-de-aspnet-2/</guid>
		<description><![CDATA[Estoy usando .NET 2. Tengo mi archivo .XSD (Data Layer) y mi Business Logic. El caso es que en el .XSD estoy poniendo esta consulta: Clic para mostrar texto plano MySQL: SELECT * FROM tabla WHERE nombre LIKE ? Yo quería encontrar cualquier campo que contuviera el string solicitado, es decir, si alguien buscaba "pa", [...]]]></description>
			<content:encoded><![CDATA[<p>Estoy usando .NET 2.  Tengo mi archivo .XSD (Data Layer) y mi Business Logic.</p>
<p>El caso es que en el .XSD estoy poniendo esta consulta:</p>
<div class="igBar"><span id="lmysql-15"><a href="#" onclick="javascript:showPlainTxt('mysql-15'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">MySQL:</span>
<div id="mysql-15">
<div class="mysql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> tabla <span style="color: #993333; font-weight: bold;">WHERE</span> nombre LIKE ? </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Yo quería encontrar cualquier campo que contuviera el string solicitado, es decir, si alguien buscaba "pa", la sentencia debía regresar valores como "paco", "palabra", "pais", etc.  Pero con el <code>LIKE</code> solamente regresaba el valor si la coincidencia era exacta.</p>
<p>Otros intentos que hice fueron:</p>
<div class="igBar"><span id="lmysql-16"><a href="#" onclick="javascript:showPlainTxt('mysql-16'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">MySQL:</span>
<div id="mysql-16">
<div class="mysql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> tabla <span style="color: #993333; font-weight: bold;">WHERE</span> nombre LIKE <span style="color: #ff0000;">'%?%'</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<div class="igBar"><span id="lmysql-17"><a href="#" onclick="javascript:showPlainTxt('mysql-17'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">MySQL:</span>
<div id="mysql-17">
<div class="mysql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> tabla <span style="color: #993333; font-weight: bold;">WHERE</span> nombre LIKE %?% </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<div class="igBar"><span id="lmysql-18"><a href="#" onclick="javascript:showPlainTxt('mysql-18'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">MySQL:</span>
<div id="mysql-18">
<div class="mysql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> tabla <span style="color: #993333; font-weight: bold;">WHERE</span> nombre LIKE \%?\% </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Ninguno sirve porque al parecer al definir la sentencia SQL en el archivo .XSD, el signo de interrogación no puede tener ningún comodín.</p>
<p>Entonces busqué alguna función que pudiera ayudarme, y al final lo logré.  La sentencia debe quedar así:</p>
<div class="igBar"><span id="lmysql-19"><a href="#" onclick="javascript:showPlainTxt('mysql-19'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">MySQL:</span>
<div id="mysql-19">
<div class="mysql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> tabla <span style="color: #993333; font-weight: bold;">WHERE</span> <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">INSTR</span><span style="color: #66cc66;">&#40;</span>nombre,?<span style="color: #66cc66;">&#41;</span>&gt; <span style="color: #cc66cc;color:#800000;">0</span><span style="color: #66cc66;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><code>INSTR(str,substr)</code> devuelve la posición de la primera ocurrencia de <code>substring</code> en la cadena de texto <code>str</code>.</p>
<p>Así que si devuelve un número mayor a cero, significa que lo encontró.</p>
<p>Ahora bien, siendo más estrictos, lo que yo quería era que encontrara el principio de la palabra.  Es decir, si alguien buscaba por "yo" debería encontrar "yolanda", pero no "pelayo".  Entonces necesitaba algo que le indicara que buscara solamente al principio del campo.</p>
<p>Así es como lo logré:</p>
<div class="igBar"><span id="lmysql-20"><a href="#" onclick="javascript:showPlainTxt('mysql-20'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">MySQL:</span>
<div id="mysql-20">
<div class="mysql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> tabla <span style="color: #993333; font-weight: bold;">WHERE</span> nombre REGEXP <span style="color: #993333; font-weight: bold;">CONCAT</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'^'</span>,?<span style="color: #66cc66;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><code>expr REGEXP pat</code> realiza una búsqueda de expresiones regulares en la cadena <code>expr</code> usando el modelo <code>pat</code>.</p>
<p><code>CONCAT(cad1, cad2, ...)</code> une cadenas de texto.</p>
<p>Es decir que al ejecutarse:<br />
<code>SELECT * from tabla where nombre REGEXP CONCAT('^','yo')</code><br />
Se convierte en:<br />
<code>SELECT * from tabla where nombre REGEXP '^yo'</code></p>
<p>Como sabes, el símbolo <code>^</code> en expresiones regulares, significa el inicio de una palabra.</p>
<p>El signo '?' es por si estás utilizando MySQL.<br />
Si utilizas SQL Server, cambia el '?' por '@Nombre' o cualquiera que sea el nombre de tu parámetro.</p>
<p>Para mayor información:<br />
<a href="http://dev.mysql.com/doc/refman/5.0/en/string-functions.html">http://dev.mysql.com/doc/refman/5.0/en/string-functions.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.viale.mx/2007/05/31/sql-que-encuentra-coincidencias-de-un-string-sin-usar-like-en-un-xsd-de-aspnet-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo mostrar los n primeros registros de una tabla o consulta</title>
		<link>http://www.viale.mx/2007/05/18/como-mostrar-los-n-primeros-registros-de-una-tabla-o-consulta/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=como-mostrar-los-n-primeros-registros-de-una-tabla-o-consulta</link>
		<comments>http://www.viale.mx/2007/05/18/como-mostrar-los-n-primeros-registros-de-una-tabla-o-consulta/#comments</comments>
		<pubDate>Sat, 19 May 2007 01:22:59 +0000</pubDate>
		<dc:creator>Pablo Viale</dc:creator>
				<category><![CDATA[SQL (mySQL)]]></category>

		<guid isPermaLink="false">http://www.viale.com.mx/2007/05/18/como-mostrar-los-n-primeros-registros-de-una-tabla-o-consulta/</guid>
		<description><![CDATA[En ocasiones es necesario mostrar los n primeros registros de una tabla o consulta. Supón que tienes una base de datos donde guardas un historial de noticias. Quieres mostrar en la portada de tu sitio web las 5 noticias más recientes. Es sencillo realizar una consulta que te devuelva todas las noticias ordenadas por fecha [...]]]></description>
			<content:encoded><![CDATA[<p>En ocasiones es necesario mostrar los n primeros registros de una tabla o consulta.</p>
<p>Supón que tienes una base de datos donde guardas un historial de noticias.  Quieres mostrar en la portada de tu sitio web las 5 noticias más recientes.  Es sencillo realizar una consulta que te devuelva todas las noticias ordenadas por fecha descendente, pero solamente necesitas las 5 primeras.</p>
<p>Para hacerlo en mySQL se utiliza <code>LIMIT</code></p>
<p><strong>Sintaxis:</strong></p>
<div class="igBar"><span id="lsql-25"><a href="#" onclick="javascript:showPlainTxt('sql-25'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-25">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> tabla <span style="color: #993333; font-weight: bold;">LIMIT</span> x, y </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Donde:<br />
<code>x</code> es el renglón a partir del cual se devolverá.  El primer renglón es 0, no 1.<br />
<code>y</code> es la cantidad de registros a devolver.</p>
<p>De tal manera que:</p>
<div class="igBar"><span id="lsql-26"><a href="#" onclick="javascript:showPlainTxt('sql-26'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-26">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> tabla <span style="color: #993333; font-weight: bold;">LIMIT</span> <span style="color: #cc66cc;color:#800000;">0</span>, <span style="color: #cc66cc;color:#800000;">5</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
devuelve los primeros cinco renglones a partir del primero.  Es decir, los renglones 0, 1, 2, 3 y 4.</p>
<div class="igBar"><span id="lsql-27"><a href="#" onclick="javascript:showPlainTxt('sql-27'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-27">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> tabla <span style="color: #993333; font-weight: bold;">LIMIT</span> <span style="color: #cc66cc;color:#800000;">5</span>, <span style="color: #cc66cc;color:#800000;">10</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
devuelve 10 renglones a partir del sexto, es decir, los renglones 6, 7, 8, 9, 10, 11, 12, 13, 14 y 15.</p>
<p>Regresando al caso que planteado al inicio de este post, la sentencia SQL quedaría asi:</p>
<div class="igBar"><span id="lsql-28"><a href="#" onclick="javascript:showPlainTxt('sql-28'); return false;">Clic para mostrar texto plano</a></span></div>
<div class="syntax_hilite"><span class="langName">SQL:</span>
<div id="sql-28">
<div class="sql">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #993333; font-weight: bold;">SELECT</span> * <span style="color: #993333; font-weight: bold;">FROM</span> noticias <span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> fecha <span style="color: #993333; font-weight: bold;">DESC</span> <span style="color: #993333; font-weight: bold;">LIMIT</span> <span style="color: #cc66cc;color:#800000;">0</span>,<span style="color: #cc66cc;color:#800000;">5</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Para una referencia completa visita:<br />
<a href="http://dev.mysql.com/doc/refman/5.0/es/select.html">http://dev.mysql.com/doc/refman/5.0/es/select.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.viale.mx/2007/05/18/como-mostrar-los-n-primeros-registros-de-una-tabla-o-consulta/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints</title>
		<link>http://www.viale.mx/2007/05/18/failed-to-enable-constraints-one-or-more-rows-contain-values-violating-non-null-unique-or-foreign-key-constraints/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=failed-to-enable-constraints-one-or-more-rows-contain-values-violating-non-null-unique-or-foreign-key-constraints</link>
		<comments>http://www.viale.mx/2007/05/18/failed-to-enable-constraints-one-or-more-rows-contain-values-violating-non-null-unique-or-foreign-key-constraints/#comments</comments>
		<pubDate>Fri, 18 May 2007 21:15:40 +0000</pubDate>
		<dc:creator>Pablo Viale</dc:creator>
				<category><![CDATA[ASP.NET 2.0 / 3.5]]></category>
		<category><![CDATA[SQL (mySQL)]]></category>

		<guid isPermaLink="false">http://www.viale.com.mx/2007/05/18/failed-to-enable-constraints-one-or-more-rows-contain-values-violating-non-null-unique-or-foreign-key-constraints/</guid>
		<description><![CDATA[Este error ya ha aparecido en dos de mis proyectos. Tenía un Datalist (o Gridview) que estaba ligado a un ObjectDatasource, el cual se alimentaba de un Business Layer que a su vez tomaba los datos de un archivo XSD. Estuve peléandome con todos estos objetos, checando sus propiedades, borrándolos y volviéndolos a crear, y [...]]]></description>
			<content:encoded><![CDATA[<p>Este error ya ha aparecido en dos de mis proyectos.</p>
<p>Tenía un Datalist (o Gridview) que estaba ligado a un ObjectDatasource, el cual se alimentaba de un <em>Business Layer</em> que a su vez tomaba los datos de un archivo XSD.</p>
<p>Estuve peléandome con todos estos objetos, checando sus propiedades, borrándolos y volviéndolos a crear, y nada funcionó.</p>
<p>En las dos ocasiones que se me presentó esta situación, resulta que el problema estaba en los datos!</p>
<p>En ambas ocasiones estaba convirtiendo la aplicación de ASP.NET 1 a ASP.NET 2, por lo que ya contaba con la base de datos y ésta ya tenia información real.</p>
<p>Así es que si no encuentras el problema en la lógica, checa también los datos.  En uno de los casos pasaba que había un campo de fecha, el cual tenía muchos registros que tenían la fecha establecida en "0000-00-00", es decir, no la habían capturado porque era un campo que quedó en desuso y no tuve la precisión de eliminarlo o llenarlo con una fecha válida.</p>
<p>El caso es que cuando la aplicación trataba de llenar el DataList, se encontraba con esa fecha inválida y regresaba el error:</p>
<p><code>Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.</code></p>
<p>Mi solución:  llené todos esos campos con fechas válidas y funcionó.  </p>
<p>Repito, pasa muchas veces, si no encuentras el error en tu lógica, siempre revisa la validez de los datos en la base de datos.</p>
<h2>Actualización</h2>
<p>Me volvió a suceder el mismo error, y encontré una razón más contundente.</p>
<p>Resulta que mi sentencia SQL hacía un <code>join</code> de tres tablas.  Estaba intentando colocar esa sentencia en un <code>TableAdapter</code> que había creado para una de las tablas:</p>
<p><a href='http://www.viale.com.mx/wp-content/uploads/2007/06/constraints1.gif' title='TableAdapter para una sola tabla'><img src='http://www.viale.com.mx/wp-content/uploads/2007/06/constraints1.gif' alt='TableAdapter para una sola tabla' /></a></p>
<p>El <code>TableAdapter</code> mostrado arriba contiene la definición de una tabla, es por eso que se pueden leer los campos id, idPostal, idusuario, etc.</p>
<p>Al ejecutar el <code>join</code> se mostraba el error descrito en la primera parte de este post.</p>
<p>Para solucionar esta situación tuve que pasar la sentencia que contenía el <code>join</code> a un nuevo <code>TableAdapter</code>, como se muestra a continuación:</p>
<p><a href='http://www.viale.com.mx/wp-content/uploads/2007/06/constraints2.gif' title='TableAdapter para un join de varias tablas'><img src='http://www.viale.com.mx/wp-content/uploads/2007/06/constraints2.gif' alt='TableAdapter para un join de varias tablas' /></a></p>
<p>Listo, como puedes ver el <code>TableAdapter</code> creado ya no contiene toda la definición de las columnas.  Le cree una clase <code>BusinessLogic</code> la cual uso en mi código y ya no marca esos problemas. <img src='http://www.viale.mx/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Segunda Actualización</h2>
<p>En otros casos puede ser la propiedad <code>MaxLength</code>.  Por ejemplo, si en tu <code>TableAdapter</code> tienes esa propiedad establecida en un valor distinto al que aparece para ese mismo campo en las sentencias <code>Insert</code> o <code>Update</code>, también ocurre este error.  Todos los <code>MaxLength</code> para el mismo campo deben ser iguales para todas las sentencias y para las propiedades mismas del adaptador.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.viale.mx/2007/05/18/failed-to-enable-constraints-one-or-more-rows-contain-values-violating-non-null-unique-or-foreign-key-constraints/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

