<?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>Code Corner &#187; SQL</title>
	<atom:link href="http://CodeCorner.galanter.net/tag/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://CodeCorner.galanter.net</link>
	<description>ASP.NET, XML, SQL and Javascript tips and tricks</description>
	<lastBuildDate>Tue, 20 Jul 2010 18:52:51 +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>T-SQL: Automatically Upgrade NVARCHAR(N) field to NVARCHAR(MAX)</title>
		<link>http://CodeCorner.galanter.net/2010/01/05/t-sql-automatically-upgrade-to-nvarcharmax/</link>
		<comments>http://CodeCorner.galanter.net/2010/01/05/t-sql-automatically-upgrade-to-nvarcharmax/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 19:36:46 +0000</pubDate>
		<dc:creator>Yuriy</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[Data]]></category>

		<guid isPermaLink="false">http://CodeCorner.galanter.net/?p=812</guid>
		<description><![CDATA[If you're writing an SQL upgrade script that updates a field in your table from NVARCHAR(n) data type to NVARCHAR(max) and the script is designed to run many times - an easy way to avoid multiple table alteration is to check for max character length for that field, i.e.: IF (SELECT CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE [...]]]></description>
			<content:encoded><![CDATA[<p>If you're writing an SQL upgrade script that updates a field in your table from <strong>NVARCHAR(<em>n</em>)</strong> data type to <strong>NVARCHAR(<em>max</em>)</strong> and the script is designed to run many times - an easy way to avoid multiple table alteration is to check for max character length for that field, i.e.:</p>
<pre class="brush: sql;">IF (SELECT CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MY_TABLE' AND COLUMN_NAME = 'MY_COLUMN')&lt;&gt;-1
BEGIN
	ALTER TABLE [dbo].[MY_TABLE] ALTER COLUMN [MY_COLUMN] [nvarchar](max) NOT NULL
END</pre>
<p>This code checks length of the field which is specific number for standard <strong>NVARCHAR</strong> and -1 for <strong>NVARCHAR(<em>max</em>)</strong>, and alters column type only if it hasn't already been altered.
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://CodeCorner.galanter.net/2010/01/05/t-sql-add-column-with-default-values-to-a-table/" rel="bookmark" class="crp_title">T-SQL: Add column with default values to a table</a></li>
<li><a href="http://CodeCorner.galanter.net/2009/06/25/t-sql-string-aggregate-in-sql-server/" rel="bookmark" class="crp_title">T-SQL String Aggregate in SQL Server</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://CodeCorner.galanter.net/2010/01/05/t-sql-automatically-upgrade-to-nvarcharmax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>T-SQL: Add column with default values to a table</title>
		<link>http://CodeCorner.galanter.net/2010/01/05/t-sql-add-column-with-default-values-to-a-table/</link>
		<comments>http://CodeCorner.galanter.net/2010/01/05/t-sql-add-column-with-default-values-to-a-table/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 17:16:18 +0000</pubDate>
		<dc:creator>Yuriy</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[feature]]></category>

		<guid isPermaLink="false">http://CodeCorner.galanter.net/?p=809</guid>
		<description><![CDATA[Let's say you need to add a column to an existing table that already contains some rows. And this new column needs to be prepopulated with a default value. For example integer nullable column NEW_COLUMN is added to table MY_TABLE. Common approach is to check for column existence, and if it doesn't exist - create [...]]]></description>
			<content:encoded><![CDATA[<p>Let's say you need to add a column to an existing table that already contains some rows. And this new column needs to be prepopulated with a default value. For example integer nullable column <strong>NEW_COLUMN</strong> is added to table <strong>MY_TABLE</strong>. Common approach is to check for column existence, and if it doesn't exist - create and populate it:</p>
<pre class="brush: sql;">if not (exists(SELECT * FROM SYSCOLUMNS WHERE ID = OBJECT_ID('[dbo].[MY_TABLE]') AND Name = 'NEW_COLUMN'))
BEGIN
	ALTER TABLE [dbo].[MY_TABLE] ADD [NEW_COLUMN] [int] NULL
	UPDATE [dbo].[MY_TABLE] SET [NEW_COLUMN] = 1
END</pre>
<p>But this doesn't work - you get "<em><span style="color: #ff0000;">Invalid column name</span></em>" error. The trick is - you don't need a separate <strong>UPDATE</strong> statement. <strong>ALTER TABLE ... ADD</strong> statement has a <strong>DEFAULT</strong> parameter. You can modify previous code like this:</p>
<pre class="brush: sql;">if not (exists(SELECT * FROM SYSCOLUMNS WHERE ID = OBJECT_ID('[dbo].[MY_TABLE]') AND Name = 'NEW_COLUMN'))
BEGIN
	ALTER TABLE [dbo].[MY_TABLE] ADD [NEW_COLUMN] [int] NULL DEFAULT 1 WITH VALUES
END</pre>
<p>This <strong>ALTER</strong> statement assigns default value of 1 to the new column. <strong>WITH VALUES</strong> parameter is important, it populates existing rows with the default value (without it it will be populated by NULLs).
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://CodeCorner.galanter.net/2010/01/05/t-sql-automatically-upgrade-to-nvarcharmax/" rel="bookmark" class="crp_title">T-SQL: Automatically Upgrade NVARCHAR(N) field to NVARCHAR(MAX)</a></li>
<li><a href="http://CodeCorner.galanter.net/2008/08/21/infragistics-ultrawebgrid-grouping-in-code-problem-solved/" rel="bookmark" class="crp_title">Infragistics UltraWebGrid grouping in code problem (solved)</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://CodeCorner.galanter.net/2010/01/05/t-sql-add-column-with-default-values-to-a-table/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress MU: Delete Empty Posts</title>
		<link>http://CodeCorner.galanter.net/2009/12/11/wordpress-mu-delete-empty-posts/</link>
		<comments>http://CodeCorner.galanter.net/2009/12/11/wordpress-mu-delete-empty-posts/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 21:29:23 +0000</pubDate>
		<dc:creator>Yuriy</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[solution]]></category>

		<guid isPermaLink="false">http://CodeCorner.galanter.net/?p=711</guid>
		<description><![CDATA[Sometimes I bring information to a couple of my other WordPress blogs via RSS feed. It's a nice feature, allowing you to create several posts at once without manual entry. Unfortunately if RSS feed is broken or improperly formatted it can result in blank posts imported into the blog. I was looking for a WordPress [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes I bring information to a couple of my other WordPress blogs via RSS feed. It's a nice feature, allowing you to create several posts at once without manual entry. Unfortunately if RSS feed is broken or improperly formatted it can result in blank posts imported into the blog.</p>
<p>I was looking for a WordPress plugin that would allow me to mass-delete empty posts, but apparently none exist. You can delete posts based on date, tags, category, but not the content. Fortunately if you have access to phpMyAdmin of your MySQL installation - there is a solution.<span id="more-711"></span></p>
<p><strong><span style="color: #ff0000">Warning! Backup your database before performing following operations!</span></strong></p>
<p>In phpMyAdmin locate the database that hosts your blog data. In a standard WordPress installation table "<strong>wp_posts</strong>" holds all blog's posts. In case of WordPress MU the table name would be "<strong>wp_&lt;blog_number&gt;_posts</strong>", for example "<strong>wp_6_posts</strong>". The content of the post in both cases is stored in "<strong>post_content</strong>" field. So to delete all empty posts in a standard WordPress following SQL query can be used:</p>
<pre class="brush: sql;">DELETE FROM wp_posts WHERE post_content=''</pre>
<p>To delete blank posts for a specific blog in a WordPress MU installation, query similar to this one can be used:</p>
<pre class="brush: sql;">DELETE FROM wp_6_posts WHERE post_content=''</pre>
<p><img src="http://www.galanter.net/sitepic/deleteEmptyPosts.png" alt="" /><br />
This example assumes you're working with blog #6.
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://CodeCorner.galanter.net/2009/12/26/tnx-net-and-autoblogging-generate-steady-income/" rel="bookmark" class="crp_title">TNX.NET and autoblogging: Generate steady income</a></li>
<li><a href="http://CodeCorner.galanter.net/2009/05/14/fixing-wordpress-27-broken-permalinks/" rel="bookmark" class="crp_title">Fixing WordPress 2.7 broken permalinks</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://CodeCorner.galanter.net/2009/12/11/wordpress-mu-delete-empty-posts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Select specific groups using DENSE_RANK</title>
		<link>http://CodeCorner.galanter.net/2009/07/01/select-specific-groups-using-dense-rank/</link>
		<comments>http://CodeCorner.galanter.net/2009/07/01/select-specific-groups-using-dense-rank/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 15:05:01 +0000</pubDate>
		<dc:creator>Yuriy</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://CodeCorner.galanter.net/?p=286</guid>
		<description><![CDATA[Imagine after running a query like this: SELECT ContactName, Country FROM Customers ORDER BY Country on Northwind database and getting following result: ContactName Country Patricio Simpson Argentina Yvonne Moncada Argentina Sergio Gutiérrez Argentina Georg Pipps Austria Roland Mendel  Austria Catherine Dewey  Belgium Pascale Cartrain  Belgium Anabela Domingues  Brazil Paula Parente  Brazil Bernardo Batista  Brazil Lúcia [...]]]></description>
			<content:encoded><![CDATA[<p>Imagine after running a query like this:</p>
<pre class="brush: sql;">SELECT ContactName, Country FROM Customers ORDER BY Country</pre>
<p>on Northwind database and getting following result:</p>
<pre class="brush: sql;">ContactName           Country
Patricio Simpson      Argentina
Yvonne Moncada        Argentina
Sergio Gutiérrez      Argentina
Georg Pipps           Austria
Roland Mendel         Austria
Catherine Dewey       Belgium
Pascale Cartrain      Belgium
Anabela Domingues     Brazil
Paula Parente         Brazil
Bernardo Batista      Brazil
Lúcia Carvalho        Brazil
Janete Limeira        Brazil
Aria Cruz             Brazil
André Fonseca         Brazil
Mario Pontes          Brazil
Pedro Afonso          Brazil
Elizabeth Lincoln     Canada
Jean Fresnière        Canada
Yoshi Tannamuri       Canada
...</pre>
<p>You're asked to retreive only the 2nd and the 5th group of contacts. How do you do it?<span id="more-286"></span><span style="color: #ff00ff"> DENSE_RANK</span><span style="color: #808080">()</span> is the answer. Modify the query like this:</p>
<pre class="brush: sql;">SELECT ContactName, Country, DENSE_RANK() OVER (ORDER BY Country) FROM Customers</pre>
<p>The DENSE_RANK() function returns rank (number) of row group where partition is specified in OVER(ORDER BY...) clause. Here is the result:</p>
<pre class="brush: sql;">ContactName           Country            No column name
Patricio Simpson      Argentina          1
Yvonne Moncada        Argentina          1
Sergio Gutiérrez      Argentina          1
Georg Pipps           Austria            2
Roland Mendel         Austria            2
Catherine Dewey       Belgium            3
Pascale Cartrain      Belgium            3
Anabela Domingues     Brazil             4
Paula Parente         Brazil             4
Bernardo Batista      Brazil             4
Lúcia Carvalho        Brazil             4
Janete Limeira        Brazil             4
Aria Cruz	          Brazil             4
André Fonseca         Brazil             4
Mario Pontes          Brazil             4
Pedro Afonso          Brazil             4
Elizabeth Lincoln     Canada             5
Jean Fresnière        Canada             5
Yoshi Tannamuri       Canada             5
...</pre>
<p>Now the only thing left is to select group with rank 2 and 5:
<pre class="brush: sql;">SELECT ContactName, Country FROM
 (SELECT ContactName, Country, DENSE_RANK() OVER (ORDER BY Country) AS GROUP_NO
  FROM Customers) AS Cust
WHERE GROUP_NO IN (2,5)</pre>
<p>The result:
<pre class="brush: sql;">ContactName           Country
Georg Pipps           Austria
Roland Mendel         Austria
Elizabeth Lincoln     Canada
Jean Fresnière        Canada
Yoshi Tannamuri       Canada</pre>
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://CodeCorner.galanter.net/2009/06/25/t-sql-string-aggregate-in-sql-server/" rel="bookmark" class="crp_title">T-SQL String Aggregate in SQL Server</a></li>
<li><a href="http://CodeCorner.galanter.net/2009/05/13/ultrawebgrid-highlight-row-on-mouseover/" rel="bookmark" class="crp_title">Ultrawebgrid: Highlight row on MouseOver</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://CodeCorner.galanter.net/2009/07/01/select-specific-groups-using-dense-rank/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>T-SQL String Aggregate in SQL Server</title>
		<link>http://CodeCorner.galanter.net/2009/06/25/t-sql-string-aggregate-in-sql-server/</link>
		<comments>http://CodeCorner.galanter.net/2009/06/25/t-sql-string-aggregate-in-sql-server/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 20:00:27 +0000</pubDate>
		<dc:creator>Yuriy</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[workaround]]></category>

		<guid isPermaLink="false">http://CodeCorner.galanter.net/?p=268</guid>
		<description><![CDATA[T-SQL dialect of SQL doesn't have aggregate functions for strings, but there is an easy workaround using magic of XML. Consider Employees table of the Northwind database. When I run following query: SELECT Country, FirstName FROM Employees ORDER BY Country, FirstName I get following result: Country FirstName UK  Anne UK  Michael UK  Robert UK  Steven [...]]]></description>
			<content:encoded><![CDATA[<p>T-SQL dialect of SQL doesn't have aggregate functions for strings, but there is an easy workaround using magic of XML.</p>
<p>Consider <strong>Employees</strong> table of the <strong>Northwind </strong>database. When I run following query:</p>
<pre class="brush: sql;">SELECT Country, FirstName FROM Employees ORDER BY Country, FirstName</pre>
<p>I get following result:</p>
<pre class="brush: sql;">
Country FirstName
UK      Anne
UK      Michael
UK      Robert
UK      Steven
USA     Andrew
USA     Janet
USA     Laura
USA     Margaret
USA     Nancy</pre>
<p>Now I want to combine first names into comma separated strings grouped by country.<span id="more-268"></span>Take a look at following SQL code:</p>
<pre class="brush: sql;">SELECT DISTINCT Country,

(STUFF((SELECT ',' + FirstName FROM Employees E2 WHERE  E1.Country = E2.Country	ORDER BY FirstName
FOR XML PATH(''), TYPE, ROOT).value('root[1]','nvarchar(max)'),1,1,'')) as FirstNames

FROM Employees E1 ORDER BY Country</pre>
<p>The internal subquery is the important part. The <strong>FOR XML PATH</strong> clause combines data into a single output, the <strong>,TYPE, ROOT</strong> statements make sure that the output is of XML type with a root node. And the <strong>.value</strong> method converts output into varchar to display characters like "&lt;" or "&gt;" correctly. The result:</p>
<pre class="brush: sql;">Country  FirstNames
UK       Anne,Michael,Robert,Steven
USA      Andrew,Janet,Laura,Margaret,Nancy</pre>
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://CodeCorner.galanter.net/2009/07/01/select-specific-groups-using-dense-rank/" rel="bookmark" class="crp_title">Select specific groups using DENSE_RANK</a></li>
<li><a href="http://CodeCorner.galanter.net/2010/01/05/t-sql-automatically-upgrade-to-nvarcharmax/" rel="bookmark" class="crp_title">T-SQL: Automatically Upgrade NVARCHAR(N) field to NVARCHAR(MAX)</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://CodeCorner.galanter.net/2009/06/25/t-sql-string-aggregate-in-sql-server/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Group By and Aggregates in .NET DataTable</title>
		<link>http://CodeCorner.galanter.net/2009/04/20/group-by-and-aggregates-in-net-datatable/</link>
		<comments>http://CodeCorner.galanter.net/2009/04/20/group-by-and-aggregates-in-net-datatable/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 13:31:14 +0000</pubDate>
		<dc:creator>Yuriy</dc:creator>
				<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[VB.NET]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[workaround]]></category>

		<guid isPermaLink="false">http://CodeCorner.galanter.net/?p=161</guid>
		<description><![CDATA[Often there is a need to perform group by operations on in-memory .NET data tables. You can’t run a standard SQL statement and LINQ is not available prior version 3.0 of .NET. To compensate for this shortcoming I put together a small function that works in .NET 2.0. As input parameters it accepts source DataTable, [...]]]></description>
			<content:encoded><![CDATA[<p>Often there is a need to perform group by operations on in-memory .NET data tables. You can’t run a standard SQL statement and LINQ is not available prior version 3.0 of .NET. To compensate for this shortcoming I put together a small function that works in .NET 2.0. As input parameters it accepts source DataTable, column name to group by and a column name to perform aggregate operation on. It returns a grouped data as data table:</p>
<pre class="brush: vb;">Function GroupBy(ByVal i_sGroupByColumn As String, ByVal i_sAggregateColumn As String, ByVal i_dSourceTable As DataTable) As DataTable

        'getting distinct values for group column
        Dim dv As New DataView(i_dSourceTable)

        'adding column for the row count
        Dim dtGroup As DataTable = dv.ToTable(True, New String() {i_sGroupByColumn}) 

        dtGroup.Columns.Add(&quot;Count&quot;, GetType(Integer)) 

        'looping thru distinct values for the group, counting
        For Each dr As DataRow In dtGroup.Rows
            dr(&quot;Count&quot;) = i_dSourceTable.Compute(&quot;Count(&quot; &amp; i_sAggregateColumn &amp; &quot;)&quot;, i_sGroupByColumn &amp; &quot; = '&quot; &amp; dr(i_sGroupByColumn) &amp; &quot;'&quot;)
        Next        

        'returning grouped/counted result
        Return dtGroup
End Function</pre>
<p>The function first gets distinct values for group-by column, by creating a data view from source data table and using DataView’s "ToTable" method. It then loops thru these distinct values performing aggregate function on the source table using DataTable’s "Compute" method - Count in this case, but it can easily be replaced with other aggregates.
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://CodeCorner.galanter.net/2009/12/17/grouping-ado-net-datatable-using-linq/" rel="bookmark" class="crp_title">Grouping ADO.NET DataTable using LINQ</a></li>
<li><a href="http://CodeCorner.galanter.net/2009/12/17/linq-truly-language-integrated/" rel="bookmark" class="crp_title">LINQ: Truly language integrated. Using VB functions inside of LINQ Query</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://CodeCorner.galanter.net/2009/04/20/group-by-and-aggregates-in-net-datatable/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>TSQL IsNumeric function returns false positives</title>
		<link>http://CodeCorner.galanter.net/2009/04/03/tsql-isnumeric-function-returns-false-positives/</link>
		<comments>http://CodeCorner.galanter.net/2009/04/03/tsql-isnumeric-function-returns-false-positives/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 14:31:15 +0000</pubDate>
		<dc:creator>Yuriy</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[workaround]]></category>

		<guid isPermaLink="false">http://CodeCorner.galanter.net/?p=146</guid>
		<description><![CDATA[IsNumeric(data)  is a widely used function in SQL Server programming.  If passed in data is a number - it returns 1, otherwise 0. Supposedly. There're several cases when it returns 1 even though the data is not numeric. Some of those cases are: dollar sign "$", minus sign "-", space, tab. If you try to [...]]]></description>
			<content:encoded><![CDATA[<p><em>IsNumeric(data)</em>  is a widely used function in SQL Server programming.  If passed in data is a number - it returns 1, otherwise 0. Supposedly. There're several cases when it returns 1 even though the data is not numeric. Some of those cases are: dollar sign "$", minus sign "-", space, tab. If you try to call <em>Cast</em> or <em>Convert</em> function on the data after that to convert data to number - they will throw an error</p>
<p>An <a title="isnumeric() incorrectly identifies numeric values in MSSQL" href="http://www.sqlhacks.com/index.php/Retrieve/Isnumeric-problems" target="_blank">excellent article at SQL Hacks</a> suggest adding <strong>"e0"</strong> to the data when passing it to IsNumeric function. What it does essentualy is making the number to be in scientific format, e.g <strong>12.34</strong> becomes <strong>12.34e0</strong> (or <strong>12.34 * 1</strong>). Which still remains a number. So <em>IsNumeric(12.34e0)</em> returns <strong>1</strong> while <em>IsNumeric($e0)</em> returns <strong>0</strong>.</p>
<p>Which works great until actual number in scientific format is passed.  If you try to test for example <strong>1.234e5</strong>, <em>IsNumeric</em> correctly returns <strong>1</strong>, but by adding <strong>"e0"</strong> as article suggest <em>IsNumeric(1.2345e5e0)</em> returns <strong>0</strong>.</p>
<p>To work around this limitation I simple test for an <strong>"e"</strong> within passed data. If it exist, I am calling IsNumeric as usual, if it does not - I am adding <strong>"e0"</strong> to the tested data:</p>
<p><em>CREATE FUNCTION IsRealNumber (@i_sValueToTest nvarchar(250))<br />
</em><em>/* This function tests if passed in value a real number */</em></p>
<p><em>RETURNS int<br />
</em><em>AS<br />
</em><em>BEGIN<br />
</em><em>       DECLARE @iResult int</em></p>
<p><em>      -- if there is 'E' in the value - do a standard IsNumeric test<br />
     IF CHARINDEX('E', UPPER(@i_sValueToTest))&lt;&gt; 0<br />
            SET @iResult = IsNumeric(@i_sValueToTest)<br />
      -- Otherwise do a modified IsNumeric test by adding 'E0' at the end<br />
    ELSE<br />
          SET @iResult = IsNumeric(@i_sValueToTest + 'E0')</em></p>
<p><em>        RETURN @iResult<br />
END</em>
<div id="crp_related">
<h4>Related Posts:</h4>
<ul>
<li><a href="http://CodeCorner.galanter.net/2010/01/05/t-sql-automatically-upgrade-to-nvarcharmax/" rel="bookmark" class="crp_title">T-SQL: Automatically Upgrade NVARCHAR(N) field to NVARCHAR(MAX)</a></li>
<li><a href="http://CodeCorner.galanter.net/2009/10/09/postback-disabled-textbox/" rel="bookmark" class="crp_title">Postback disabled/readonly Textbox that was modified in JavaScript</a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://CodeCorner.galanter.net/2009/04/03/tsql-isnumeric-function-returns-false-positives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
