<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.2" -->
<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/"
	>

<channel>
	<title>YeshuaAgapao.com Blog</title>
	<link>http://www.YeshuaAgapao.com/blog</link>
	<description>Emule, other P2P File Sharing, Autism, Paranoia, Bible, Politics, Soccer, Science / Astronomy and other stuff</description>
	<pubDate>Fri, 30 May 2008 17:43:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.2</generator>
	<language>en</language>
			<item>
		<title>Parsing 1D and 2D Delimited Strings (Arrays) in SQL Server 2005 and 2000</title>
		<link>http://www.YeshuaAgapao.com/blog/2008/05/30/parsing-1d-and-2d-delimited-strings-arrays-in-sql-server-2005-and-2000/</link>
		<comments>http://www.YeshuaAgapao.com/blog/2008/05/30/parsing-1d-and-2d-delimited-strings-arrays-in-sql-server-2005-and-2000/#comments</comments>
		<pubDate>Fri, 30 May 2008 17:43:09 +0000</pubDate>
		<dc:creator>YeshuaAgapao</dc:creator>
		
	<category>Computers / Technology</category>
		<guid isPermaLink="false">http://www.YeshuaAgapao.com/blog/2008/05/30/parsing-1d-and-2d-delimited-strings-arrays-in-sql-server-2005-and-2000/</guid>
		<description><![CDATA[I&#8217;m re-posting a post I put at SQLServerCentral.com
********************************************************************************
This 2D stuff is excellent for normalizing 1NF (first normal form) violations like &#8216;123^12&#124;456^45&#8242;&#124;789^12&#124;945^34&#8242;
2D array parsing without table variables or temp tables! It is using Itzik Ben-Gan&#8217;s parsing algorithm that relies on a table of numbers (counter / tally / nums). My version of the 2D enhancement uses [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m re-posting a post I put at <A TARGET="_blog" HREF="http://www.sqlservercentral.com/Forums/Topic499145-203-2.aspx">SQLServerCentral.com</A><BR /><BR /></p>
<p>********************************************************************************<BR /><BR /></p>
<p>This 2D stuff is excellent for normalizing 1NF (first normal form) violations like &#8216;123^12|456^45&#8242;|789^12|945^34&#8242;</p>
<p>2D array parsing without table variables or temp tables! It is using Itzik Ben-Gan&#8217;s parsing algorithm that relies on a table of numbers (counter / tally / nums). My version of the 2D enhancement uses CROSS APPLY so it doesn&#8217;t work in SQL Server 2000.</p>
<p><b>2D &#8216;Table&#8217; version - outputs vertical-ized data only; faster but not very useful on 2D data:</b><br />
<DIV STYLE="height:480px;width:768px;border:2px inset;overflow:auto">
<pre>--Normal VarChar version
CREATE FUNCTION dbo.fn_DelimitToTable_2D
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@String VarChar(8000),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter1 VarChar(1),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter2 VarChar(1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) RETURNS TABLE
AS

RETURN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT Counter2nd.Value AS Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SUBSTRING(@String+@Delimiter1, PK_CountID, CHARINDEX(@Delimiter1, @String+@Delimiter1, PK_CountID)-PK_CountID) AS Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(@String)+LEN(@Delimiter1) AND SubString(@Delimiter1 + @String + @Delimiter1, PK_CountID, 1)=@Delimiter1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) AS Counter1st
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CROSS APPLY (
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SUBSTRING(Counter1st.Value+@Delimiter2, PK_CountID, CHARINDEX(@Delimiter2, Counter1st.Value+@Delimiter2, PK_CountID)-PK_CountID) AS Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(Counter1st.Value)+LEN(@Delimiter2) AND SubString(@Delimiter2 + Counter1st.Value + @Delimiter2, PK_CountID, 1)=@Delimiter2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) AS Counter2nd
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>)
GO

&#8211;Integer casting version when output is used to join to integer PK/FK columns.
CREATE FUNCTION dbo.fn_DelimitToIntTable_2D
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@String VarChar(8000),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter1 VarChar(1),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter2 VarChar(1)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) RETURNS TABLE
AS

RETURN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT CONVERT(int, Counter2nd.Value) AS PK_IntID
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SUBSTRING(@String+@Delimiter1, PK_CountID, CHARINDEX(@Delimiter1, @String+@Delimiter1, PK_CountID)-PK_CountID) AS Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(@String)+LEN(@Delimiter1) AND SubString(@Delimiter1 + @String + @Delimiter1, PK_CountID, 1)=@Delimiter1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) AS Counter1st
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CROSS APPLY (
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SUBSTRING(Counter1st.Value+@Delimiter2, PK_CountID, CHARINDEX(@Delimiter2, Counter1st.Value+@Delimiter2, PK_CountID)-PK_CountID) AS Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(Counter1st.Value)+LEN(@Delimiter2) AND SubString(@Delimiter2 + Counter1st.Value + @Delimiter2, PK_CountID, 1)=@Delimiter2

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) AS Counter2nd
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>)
GO
</pre>
<p></DIV><br/><b>&#8216;Array&#8217; version - outputs indexer also (more overhead):</b><br /><DIV STYLE="height:480px;width:768px;border:2px inset;overflow:auto">
<pre>--Normal VarChar version
CREATE FUNCTION dbo.fn_DelimitToArray_2D
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@String VarChar(8000),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter1 VarChar(1),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter2 VarChar(1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) RETURNS TABLE
AS

RETURN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT Counter1st.Pos AS RowPos, Counter2nd.Pos AS ColPos, Counter2nd.Value AS Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID - LEN(REPLACE(LEFT(@String, PK_CountID-1), @Delimiter1, &#8216;&#8217;)) AS Pos,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SUBSTRING(@String+@Delimiter1, PK_CountID, CHARINDEX(@Delimiter1, @String+@Delimiter1, PK_CountID)-PK_CountID) AS Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(@String)+LEN(@Delimiter1) AND SubString(@Delimiter1 + @String + @Delimiter1, PK_CountID, 1)=@Delimiter1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) AS Counter1st
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CROSS APPLY (
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID - LEN(REPLACE(LEFT(Counter1st.Value, PK_CountID-1), @Delimiter2, &#8216;&#8217;)) AS Pos,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SUBSTRING(Counter1st.Value+@Delimiter2, PK_CountID, CHARINDEX(@Delimiter2, Counter1st.Value+@Delimiter2, PK_CountID)-PK_CountID) AS Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(Counter1st.Value)+LEN(@Delimiter2) AND SubString(@Delimiter2 + Counter1st.Value + @Delimiter2, PK_CountID, 1)=@Delimiter2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) AS Counter2nd
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>)
GO

&#8211;Integer casting version when output is used to join to integer PK/FK columns.
CREATE FUNCTION dbo.fn_DelimitToIntArray_2D
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@String VarChar(8000),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter1 VarChar(1),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter2 VarChar(1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) RETURNS TABLE
AS

RETURN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT Counter1st.Pos AS RowPos, Counter2nd.Pos AS ColPos, CONVERT(int, Counter2nd.value) AS PK_IntID
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID - LEN(REPLACE(LEFT(@String, PK_CountID-1), @Delimiter1, &#8216;&#8217;)) AS Pos,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SUBSTRING(@String+@Delimiter1, PK_CountID, CHARINDEX(@Delimiter1, @String+@Delimiter1, PK_CountID)-PK_CountID) AS value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(@String)+LEN(@Delimiter1) AND SubString(@Delimiter1 + @String + @Delimiter1, PK_CountID, 1)=@Delimiter1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) AS Counter1st
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CROSS APPLY (
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID - LEN(REPLACE(LEFT(Counter1st.value, PK_CountID-1), @Delimiter2, &#8216;&#8217;)) AS Pos,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SUBSTRING(Counter1st.value+@Delimiter2, PK_CountID, CHARINDEX(@Delimiter2, Counter1st.Value+@Delimiter2, PK_CountID)-PK_CountID) AS value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(Counter1st.value)+LEN(@Delimiter2) AND SubString(@Delimiter2 + Counter1st.value + @Delimiter2, PK_CountID, 1)=@Delimiter2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) AS Counter2nd
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>)
GO
</pre>
<p></DIV><br/>For those of you who don&#8217;t have Itzik Ben-Gan&#8217;s Inside SQL Server 2005 T-SQL books or been to any of his conference sessions (the books are a lot cheaper), here are 1D versions:</p>
<p><b>&#8216;Table&#8217; version - ordinal postion stripped out for speed; Great for stored-procedure-izing IN() clauses - WHERE id IN (1,2,3,4):</b><br /><DIV STYLE="height:480px;width:768px;border:2px inset;overflow:auto">
<pre>--Normal VarChar version
CREATE FUNCTION dbo.fn_DelimitToTable
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@String VarChar(8000),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter VarChar(1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) RETURNS TABLE
AS

RETURN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT SUBSTRING(@String+@Delimiter, PK_CountID, CHARINDEX(@Delimiter, @String+@Delimiter, PK_CountID)-PK_CountID) AS Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(@String)+LEN(@Delimiter) AND SubString(@Delimiter + @String + @Delimiter, PK_CountID, 1)=@Delimiter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>)
GO

&#8211;Integer casting version when output is used to join to integer PK/FK columns.
CREATE FUNCTION dbo.fn_DelimitToIntTable
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@String VarChar(8000),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter VarChar(1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) RETURNS TABLE
AS

RETURN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT CONVERT(int, SUBSTRING(@String+@Delimiter, PK_CountID, CHARINDEX(@Delimiter, @String+@Delimiter, PK_CountID)-PK_CountID)) AS PK_IntID
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(@String)+LEN(@Delimiter) AND SubString(@Delimiter + @String + @Delimiter, PK_CountID, 1)=@Delimiter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>)
GO
</pre>
<p></DIV><br/><b>&#8216;Array&#8217; version - with position indexer - good for index change scripts where column-order matters:</b><br /><DIV STYLE="height:480px;width:768px;border:2px inset;overflow:auto">
<pre>--Normal VarChar version
CREATE FUNCTION dbo.fn_DelimitToArray

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@String VarChar(8000),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter VarChar(1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) RETURNS TABLE
AS

RETURN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID - LEN(REPLACE(LEFT(@String, PK_CountID-1), @Delimiter, &#8216;&#8217;)) AS Pos,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SUBSTRING(@String+@Delimiter, PK_CountID, CHARINDEX(@Delimiter, @String+@Delimiter, PK_CountID)-PK_CountID) AS Value
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(@String)+LEN(@Delimiter) AND SubString(@Delimiter + @String + @Delimiter, PK_CountID, 1)=@Delimiter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>)
GO

&#8211;Integer casting version when output is used to join to integer PK/FK columns.
CREATE FUNCTION dbo.fn_DelimitToIntArray
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@String VarChar(8000),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>@Delimiter VarChar(1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>) RETURNS TABLE
AS

RETURN

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID - LEN(REPLACE(LEFT(@String, PK_CountID-1), @Delimiter, &#8216;&#8217;)) AS Pos,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CONVERT(int, SUBSTRING(@String+@Delimiter, PK_CountID, CHARINDEX(@Delimiter, @String+@Delimiter, PK_CountID)-PK_CountID)) AS PK_IntID
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>FROM dbo.counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE PK_CountID &gt;0 AND PK_CountID&lt;LEN(@String)+LEN(@Delimiter) AND SubString(@Delimiter + @String + @Delimiter, PK_CountID, 1)=@Delimiter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>)
</pre>
<p></DIV><br/><b>As for logical reads on the nums / tally / counter table:</b></p>
<p>SQL server 2005 can fit 622 numbers per page if it is clustered. That drops to 299 if it is a heap.&nbsp;<wbr/>&nbsp;SQL Server 2000 can fit 620 numbers per page clustered.</p>
<p>1 I/O per hit guaranteed: 299-number heap (seek or scan; only tested in 2005)<br />2 I/Os per hit guaranteed (seek or scan): 622 number clustered (620 for 2000)<br />Fully packed 2-level clustered index for a 2 I/O minimum per seek: 386,884 numbers (384,400 for 2000)</p>
<p>Make sure you use a 100% fill facter (the data shouldn&#8217;t ever change), and after populating the tables with data, you do a rebuild:<br />ALTER INDEX ALL ON Counter REBUILD WITH (FillFactor=100) for SQL Server 2005<br />DBCC DBREINDEX (Counter,&#8217;PK_C_IX__Counter__CountID&#8217;,100) for SQL Server 2000</p>
<p>I usually use both a &#8217;small&#8217; version and a &#8217;standard&#8217; version of the table of numbers (counter / nums / tally).&nbsp;<wbr/>&nbsp;Never needed the &#8216;big&#8217; version yet - a fully packed 3-level clustered index with 240,641,848 numbers (238,328,000 for SQL2000).<br />Here is my counter table building script for SQL Server 2005 and 2000; it runs in 4 seconds and allows or having a portion of your numbers being negative.&nbsp;<wbr/>&nbsp;@MaxPositive and @ClusteredRowsPerPage are the hard-coded controlling parameters.</p>
<p><b>1-Level, 2-Level, and 3-Level (commented) Counter / Tally / Nums table builder SQL Server 2005:</b><br /><DIV STYLE="height:480px;width:768px;border:2px inset;overflow:auto">
<pre>--*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
--DDL
--*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

SET NOCOUNT ON

--*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

IF EXISTS (SELECT * FROM sys.tables WHERE name='CounterSmall' AND schema_id=1) DROP TABLE dbo.CounterSmall
IF EXISTS (SELECT * FROM sys.tables WHERE name='Counter' AND schema_id=1) DROP TABLE dbo.Counter
--IF EXISTS (SELECT * FROM sys.tables WHERE name='CounterBig' AND schema_id=1) DROP TABLE dbo.CounterBig
GO

--*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

CREATE TABLE dbo.CounterSmall
(

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID int NOT NULL,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CONSTRAINT PK_C_IX__CounterSmall__CountID PRIMARY KEY CLUSTERED (PK_CountID) WITH FILLFACTOR=100
)

CREATE TABLE dbo.Counter
(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID int NOT NULL,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CONSTRAINT PK_C_IX__Counter__CountID PRIMARY KEY CLUSTERED (PK_CountID) WITH FILLFACTOR=100
)

/*
CREATE TABLE dbo.CounterBig
(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID int NOT NULL,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CONSTRAINT PK_C_IX__CounterBig__CountID PRIMARY KEY CLUSTERED (PK_CountID) WITH FILLFACTOR=100
)
*/
GO

&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
&#8211;Counter SQL 2005
&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

DECLARE @Power int
DECLARE @HeapRowsPerPage int
DECLARE @ClusteredRowsPerPage int
DECLARE @MaxRows int
DECLARE @MaxPositive int
DECLARE @MaxNegative int
DECLARE @OldMaxNegative int

SET @ClusteredRowsPerPage=622
SET @HeapRowsPerPage=299
SET @MaxPositive=621

&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

SET @MaxRows=@ClusteredRowsPerPage
SET @MaxPositive=@MaxPositive-1
SET @OldMaxNegative=0
SET @MaxNegative=@MaxRows-@MaxPositive-@OldMaxNegative
SET @Power=1

PRINT &#8216;CounterSmall: &#8216; + CONVERT(VarChar(10), @MaxNegative*-1+1) + &#8216; to &#8216; + CONVERT(VarChar(10), @MaxPositive) + &#8216; - &#8216; + CONVERT(VarChar(10), @MaxRows) + &#8216; Rows - 1-Level Clustered Index&#8217;

&#8211;SELECT @MaxNegative AS MaxNegative, @MaxPositive AS MaxPositive, @OldMaxNegative AS OldMaxNegative, @Power AS Power, @MaxRows AS MaxRows

TRUNCATE TABLE CounterSmall

BEGIN TRANSACTION

/*
INSERT INTO CounterSmall WITH (TABLOCKX) (PK_CountID)
SELECT PK_CountID-@MaxNegative
FROM dbo.fn_Numbers(@MaxRows)
*/

INSERT INTO CounterSmall WITH (TABLOCKX) (PK_CountID) VALUES (1-@MaxNegative)

WHILE @Power&lt;=@MaxRows
BEGIN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>INSERT INTO CounterSmall WITH (TABLOCKX) (PK_CountID)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT @Power+PK_CountID FROM CounterSmall
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE @Power+PK_CountID&lt;=@MaxPositive

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SET @Power=@Power*2
END

COMMIT

ALTER INDEX ALL ON CounterSmall REBUILD WITH (FillFactor=100)
UPDATE STATISTICS CounterSmall WITH FULLSCAN
&#8211;SELECT * FROM CounterSmall

&#8211;*=*=*=*=*=*=*=*=*=*=

SET @Power=@ClusteredRowsPerPage
SET @MaxRows=@Power*@ClusteredRowsPerPage
SET @OldMaxNegative=@MaxNegative+@OldMaxNegative
SET @MaxPositive=(@MaxPositive+1)*@ClusteredRowsPerPage
SET @MaxNegative=@MaxRows-@MaxPositive-@OldMaxNegative

PRINT &#8216;Counter: &#8216; + CONVERT(VarChar(10), @MaxNegative*-1-@OldMaxNegative+1) + &#8216; to &#8216; + CONVERT(VarChar(10), @MaxPositive) + &#8216; - &#8216; + CONVERT(VarChar(10), @MaxRows) + &#8216; Rows - 2-Level Clustered Index&#8217;

&#8211;SELECT @MaxNegative AS MaxNegative, @MaxPositive AS MaxPositive, @OldMaxNegative AS OldMaxNegative, @Power AS Power, @MaxRows AS MaxRows

TRUNCATE TABLE Counter

BEGIN TRANSACTION

INSERT INTO Counter WITH (TABLOCKX) (PK_CountID)
SELECT PK_CountID-@MaxNegative FROM CounterSmall

WHILE @Power&lt;=@MaxRows
BEGIN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>INSERT INTO Counter WITH (TABLOCKX) (PK_CountID)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT @Power+PK_CountID FROM Counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE @Power+PK_CountID&lt;=@MaxPositive

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SET @Power=@Power*2
END
COMMIT

ALTER INDEX ALL ON Counter REBUILD WITH (FillFactor=100)
UPDATE STATISTICS Counter WITH FULLSCAN
&#8211;SELECT * FROM Counter ORDER BY PK_CountID

&#8211;*=*=*=*=*=*=*=*=*=*=
/*
SET @Power=@ClusteredRowsPerPage*@ClusteredRowsPerPage
SET @MaxRows=@Power*(@ClusteredRowsPerPage-2)
SET @OldMaxNegative=@MaxNegative+@OldMaxNegative
SET @MaxPositive=(@MaxPositive+1)*@ClusteredRowsPerPage
SET @MaxNegative=@MaxRows-@MaxPositive-@OldMaxNegative

PRINT &#8216;CounterBig: &#8216; + CONVERT(VarChar(10), @MaxNegative*-1-@OldMaxNegative+1) + &#8216; to &#8216; + CONVERT(VarChar(10), @MaxPositive) + &#8216; - &#8216; + CONVERT(VarChar(10), @MaxRows) + &#8216; Rows - 3-Level Clustered Index&#8217;

&#8211;SELECT @MaxNegative AS MaxNegative, @MaxPositive AS MaxPositive, @OldMaxNegative AS OldMaxNegative, @Power AS Power, @MaxRows AS MaxRows

TRUNCATE TABLE CounterBig
UPDATE STATISTICS CounterBig WITH FULLSCAN, NORECOMPUTE

BEGIN TRANSACTION

INSERT INTO CounterBig WITH (TABLOCKX) (PK_CountID)
SELECT PK_CountID-@MaxNegative FROM Counter

WHILE @Power&lt;=@MaxRows
BEGIN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>INSERT INTO CounterBig WITH (TABLOCKX) (PK_CountID)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT @Power+PK_CountID FROM CounterBig
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE @Power+PK_CountID&lt;=@MaxPositive

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SET @Power=@Power*2
END
COMMIT

ALTER INDEX ALL ON CounterBig REBUILD WITH (FillFactor=100)
UPDATE STATISTICS CounterBig WITH FULLSCAN
&#8211;SELECT * FROM CounterBig ORDER BY PK_CountID
*/

&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID(&#8217;CounterSmall&#8217;), NULL, NULL, &#8216;DETAILED&#8217;)
SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID(&#8217;Counter&#8217;), NULL, NULL, &#8216;DETAILED&#8217;)
&#8211;SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID(&#8217;CounterBig&#8217;), NULL, NULL, &#8216;DETAILED&#8217;)

&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
GO
</pre>
<p></DIV><br/><b>1-Level, 2-Level, and 3-Level (commented) Counter / Tally / Nums table builder SQL Server 2000:</b><br /><DIV STYLE="height:480px;width:768px;border:2px inset;overflow:auto">
<pre>--*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
--DDL
--*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

SET NOCOUNT ON

--*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

IF EXISTS (SELECT * FROM sysobjects WHERE name='CounterSmall' AND uid=1 AND xtype='u') DROP TABLE dbo.CounterSmall
IF EXISTS (SELECT * FROM sysobjects WHERE name='Counter' AND uid=1 AND xtype='u') DROP TABLE dbo.Counter
--IF EXISTS (SELECT * FROM sysobjects WHERE name='CounterBig' AND uid=1 AND xtype='u') DROP TABLE dbo.CounterBig

--*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

CREATE TABLE dbo.CounterSmall
(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID int NOT NULL,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CONSTRAINT PK_C_IX__CounterSmall__CountID PRIMARY KEY CLUSTERED (PK_CountID) WITH FILLFACTOR=100
)

CREATE TABLE dbo.Counter
(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID int NOT NULL,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CONSTRAINT PK_C_IX__Counter__CountID PRIMARY KEY CLUSTERED (PK_CountID) WITH FILLFACTOR=100
)

/*
CREATE TABLE dbo.CounterBig
(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>PK_CountID int NOT NULL,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>CONSTRAINT PK_C_IX__CounterBig__CountID PRIMARY KEY CLUSTERED (PK_CountID) WITH FILLFACTOR=100
)
*/

&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
&#8211;Counter SQL 2000
&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

DECLARE @Power int
DECLARE @HeapRowsPerPage int
DECLARE @ClusteredRowsPerPage int
DECLARE @MaxRows int
DECLARE @MaxPositive int
DECLARE @MaxNegative int
DECLARE @OldMaxNegative int

SET @ClusteredRowsPerPage=620
SET @HeapRowsPerPage=299
SET @MaxPositive=619

&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

SET @MaxRows=@ClusteredRowsPerPage
SET @MaxPositive=@MaxPositive-1
SET @OldMaxNegative=0
SET @MaxNegative=@MaxRows-@MaxPositive-@OldMaxNegative
SET @Power=1

PRINT &#8216;CounterSmall: &#8216; + CONVERT(VarChar(10), @MaxNegative*-1+1) + &#8216; to &#8216; + CONVERT(VarChar(10), @MaxPositive) + &#8216; - &#8216; + CONVERT(VarChar(10), @MaxRows) + &#8216; Rows - 1-Level Clustered Index&#8217;

&#8211;SELECT @MaxNegative AS MaxNegative, @MaxPositive AS MaxPositive, @OldMaxNegative AS OldMaxNegative, @Power AS Power, @MaxRows AS MaxRows

TRUNCATE TABLE CounterSmall

BEGIN TRANSACTION

INSERT INTO CounterSmall WITH (TABLOCKX) (PK_CountID) VALUES (1-@MaxNegative)

WHILE @Power&lt;=@MaxRows
BEGIN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>INSERT INTO CounterSmall WITH (TABLOCKX) (PK_CountID)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT @Power+PK_CountID FROM CounterSmall
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE @Power+PK_CountID&lt;=@MaxPositive

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SET @Power=@Power*2
END

COMMIT

DBCC DBREINDEX (CounterSmall,&#8217;PK_C_IX__CounterSmall__CountID&#8217;,100)
UPDATE STATISTICS CounterSmall WITH FULLSCAN
&#8211;SELECT * FROM CounterSmall

&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

SET @Power=@ClusteredRowsPerPage
SET @MaxRows=@Power*@ClusteredRowsPerPage
SET @OldMaxNegative=@MaxNegative+@OldMaxNegative
SET @MaxPositive=(@MaxPositive+1)*@ClusteredRowsPerPage
SET @MaxNegative=@MaxRows-@MaxPositive-@OldMaxNegative

PRINT &#8216;Counter: &#8216; + CONVERT(VarChar(10), @MaxNegative*-1-@OldMaxNegative+1) + &#8216; to &#8216; + CONVERT(VarChar(10), @MaxPositive) + &#8216; - &#8216; + CONVERT(VarChar(10), @MaxRows) + &#8216; Rows - 2-Level Clustered Index&#8217;

&#8211;SELECT @MaxNegative AS MaxNegative, @MaxPositive AS MaxPositive, @OldMaxNegative AS OldMaxNegative, @Power AS Power, @MaxRows AS MaxRows

TRUNCATE TABLE Counter

BEGIN TRANSACTION

INSERT INTO Counter WITH (TABLOCKX) (PK_CountID)
SELECT PK_CountID-@MaxNegative FROM CounterSmall

WHILE @Power&lt;=@MaxRows
BEGIN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>INSERT INTO Counter WITH (TABLOCKX) (PK_CountID)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT @Power+PK_CountID FROM Counter
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE @Power+PK_CountID&lt;=@MaxPositive

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SET @Power=@Power*2
END
COMMIT

DBCC DBREINDEX (Counter,&#8217;PK_C_IX__Counter__CountID&#8217;,100)
UPDATE STATISTICS Counter WITH FULLSCAN
&#8211;SELECT * FROM Counter ORDER BY PK_CountID

&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

/*
SET @Power=@ClusteredRowsPerPage*@ClusteredRowsPerPage
SET @MaxRows=@Power*(@ClusteredRowsPerPage-2)
SET @OldMaxNegative=@MaxNegative+@OldMaxNegative
SET @MaxPositive=(@MaxPositive+1)*@ClusteredRowsPerPage
SET @MaxNegative=@MaxRows-@MaxPositive-@OldMaxNegative

PRINT &#8216;CounterBig: &#8216; + CONVERT(VarChar(10), @MaxNegative*-1-@OldMaxNegative+1) + &#8216; to &#8216; + CONVERT(VarChar(10), @MaxPositive) + &#8216; - &#8216; + CONVERT(VarChar(10), @MaxRows) + &#8216; Rows - 3-Level Clustered Index&#8217;

&#8211;SELECT @MaxNegative AS MaxNegative, @MaxPositive AS MaxPositive, @OldMaxNegative AS OldMaxNegative, @Power AS Power, @MaxRows AS MaxRows

TRUNCATE TABLE CounterBig
UPDATE STATISTICS CounterBig WITH FULLSCAN, NORECOMPUTE

BEGIN TRANSACTION

INSERT INTO CounterBig WITH (TABLOCKX) (PK_CountID)
SELECT PK_CountID-@MaxNegative FROM Counter

WHILE @Power&lt;=@MaxRows
BEGIN
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>INSERT INTO CounterBig WITH (TABLOCKX) (PK_CountID)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SELECT @Power+PK_CountID FROM CounterBig
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>WHERE @Power+PK_CountID&lt;=@MaxPositive

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<wbr/>SET @Power=@Power*2
END
COMMIT

DBCC DBREINDEX (Counter,&#8217;PK_C_IX__CounterBig__CountID&#8217;,100)
UPDATE STATISTICS CounterBig WITH FULLSCAN
&#8211;SELECT * FROM CounterBig ORDER BY PK_CountID
*/

&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=

DBCC SHOWCONTIG (CounterSmall) WITH ALL_LEVELS, TABLERESULTS
DBCC SHOWCONTIG (Counter) WITH ALL_LEVELS, TABLERESULTS
&#8211;DBCC SHOWCONTIG (CounterBig) WITH ALL_LEVELS, TABLERESULTS

&#8211;*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
</pre>
<p></DIV><br/>I have big versions and two-column versions as well, but the post is already too big.&nbsp;<wbr/>&nbsp;The big version gracefully can handle more than hundreds of thousands of characters because it splices into 8000 character blocks.&nbsp;<wbr/>&nbsp;More code, no longer an inline table-valued function (inline table-valued functions are processed as derived tables / views behind the scenes and are much faster), but it is faster than VarChar(max) and works in SQL Server 2000 (if the string input is text instead of VarChar(max)) and never uses more than 8000 numbers.</p>
<p>I have had other uses for a table of numbers, particularly reporting involving date-ranges and you want to show a date-range-block even if there is no data with a date within that date-range block.</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.YeshuaAgapao.com/blog/2008/05/30/parsing-1d-and-2d-delimited-strings-arrays-in-sql-server-2005-and-2000/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>One Bible per Person Rumor at Beijing China Olympic Games 2008 - eMule to the Rescue!</title>
		<link>http://www.YeshuaAgapao.com/blog/2008/04/07/one-bible-per-person-rumor-at-beijing-china-olympic-games-2008-emule-to-the-rescue/</link>
		<comments>http://www.YeshuaAgapao.com/blog/2008/04/07/one-bible-per-person-rumor-at-beijing-china-olympic-games-2008-emule-to-the-rescue/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 03:28:02 +0000</pubDate>
		<dc:creator>YeshuaAgapao</dc:creator>
		
	<category>Church/Bible</category>
	<category>P2P File Sharing</category>
	<category>Government / Corporate Paranoia</category>
		<guid isPermaLink="false">http://www.YeshuaAgapao.com/blog/2008/04/07/one-bible-per-person-rumor-at-beijing-china-olympic-games-2008-emule-to-the-rescue/</guid>
		<description><![CDATA[Visitors to Beijing Olympics advised: take no more than one Bible
Chinese believers to print Olympic Bible in China
ollowup on the China Olympic Bible Controversy
China denies Bible ban at Olympics
Senator Says Defy Chinese Bible Policy at Olympics
If this rumor is true, you can munchkin right around utilizing P2P file sharing. Chinese internet censorship is very ineffective [...]]]></description>
			<content:encoded><![CDATA[<li><a target="_blog" href="http://www.catholicnewsagency.com/new.php?n=10915">Visitors to Beijing Olympics advised: take no more than one Bible</a></li>
<li><a target="_blog" href="http://www.mnnonline.org/article/11059">Chinese believers to print Olympic Bible in China</a></li>
<li><a target="_blog" href="http://scarlettcrusader.wordpress.com/2007/11/15/followups-on-the-china-olympic-bible-controversy/">ollowup on the China Olympic Bible Controversy</a></li>
<li><a target="_blog" href="http://www.timesonline.co.uk/tol/sport/more_sport/article2835638.ece">China denies Bible ban at Olympics</a></li>
<li><a target="_blog" href="http://www.cnsnews.com/ViewCulture.asp?Page=/Culture/archive/200711/CUL20071115a.html">Senator Says Defy Chinese Bible Policy at Olympics</a></li>
<p>If this rumor is true, you can munchkin right around utilizing P2P file sharing. Chinese internet censorship is very ineffective with P2P.</p>
<p>Plenty of ED2K links at my <a target="_blog" href="http://www.yeshuaagapao.com/download.htm"> download page</a> . You can also use the built-in search engine. Burn CDs and DVDs with chinese-language bible addons for e-sword and sword project, or just use the standalone .chm files. Burn audio bibles to CD or DVD!  Burn the Jesus Film Project XVIDs to CD or convert them back to MPEG2 for DVDs!</p>
<p>If the chinese censors block <a target="_blog" href="http://www.audiotreasure.com/mp3/Mandarin/menu.htm">audiotreasure.com</a> (or you just don&#8217;t want to download individual mp3s chapter-by-chapter), I PowerShare a <a href="ed2k://|file|Religion%20Holy%20Christian%20Church%20-%20Audio%20Bible%20-%20Mandarin%20Chinese%20-%20Old%20And%20New%20Testament%20-%20%E5%9C%A3%E7%BB%8F%20%E6%96%B0%E6%97%A7%E7%BA%A6%20%E4%B8%AD%E6%96%87%E8%AF%AD%E9%9F%B3%E7%89%88%20-%20MP3.zip|454972413|6A5BDF90EE05D4C25D2A05A7D90734D1|p=9EAC9A5982A138B7A6CAA54F1FAE2994:BC396FE00627D4AA8E0FD184AB8A3617:59564F687A146780E93F833F94D1555C:C512D74BA3C31784089A3A9CB8800FA3:282C6B871799DA7ADD67A61CD5EE49D0:3DB135A109E907F64ABF85F2A007A07A:31184A64F00F6FADB0D9E66FB4B0463C:8D04A760614349C1021F7E9ECF526098:5566ACC5477DDD6D2C41979BB87F72BF:99766E7C172A22CF338AF8AB9554D71D:525AAD1029405A9A0617B70D0E60297D:12E05E7A644591583DDD0398533BCEBF:F3298F1C5A110D451C6BC4FCC7743A31:040625D1FFE11AFDA4E7607D4011D234:D7E530C7F75099EC7754A62EF93D9456:38B3C86A77300A7443D1E51E6A6F59F9:7294DAD7BA8D95A4F645DBB17FA9A759:0A11B59BA482E9E501630384BEADA164:512E5FBEEAFA602D727F258F3294799C:781756ADC061916D47B61F1B279A0625:CC7272FCED2BE84F91C2B2660C9C8950:1FE5D564326CD4A6858CBB26E8FE664E:F5FA7D36E80CA3CD5D39E989201AC46D:C0D1BF085A06B5777C12AA1DE11474C0:FEFDF862BF1612B7DBB62074A13AB6D8:F870650BAF8078D0B5F43D6B8AC08FDE:FC6FD95C128D253F8FC499D136E1447B:537B8971E0D8BAA0C0B6643588E45CAC:913C100E3380F24138E59DD52006CE1B:DD855F9F5EAC06BF12D06EB3B4D4DF71:651069DE061246FCB83545514BD00C28:E3DA249F3BD3760C8AF937D30C0F2666:5D356910F22CC69E1BDDDBF782525E6D:BD69767AC51E725CEE6A078858C8AFE8:2843CA0230EA240E80F7869816E4C727:DFC781DC17B4D57FA878079D1CD15BC6:94704386827570C30BDF7E2A846780C4:6C6074C4D46249668480C81A845FCFCC:F2B7A89994044C32091620B242E0F838:50C991B110A45EBF6B0DE4ACCE03AED6:14F30E237CF476343395A0B5072C1438:6CCCEEE543CD1DFFB8E269B942B60855:83276D9083928187369F162720FECFD2:1FCE49178700157E8CDDF01BA2AC66F3:5ACCDF584BD393686BFF4F2FCD0DDBD9:8024264B0F5002D18D376F2E8E451FD4:B3BC036A34EC106C96BC1ED364BBDDA6|h=NAL5VEKDOXQVPO676LR4PKZQRTFZVODD|/|sources,89.149.226.208:41664,70.167.221.3:41664|/">consolidated archive on the eDonkey P2P netowrk</a> (ED2K link on my site or just search for &#8216;audio bible audiotreasure.com&#8217;. I also got DVDRips of the Jesus film project in multiple chinese dialects. There are 3 other users in the UK that are devoting lots of bandwidth, so you will get decent speed smuggling contraband bibles into China! Piracy is a menace in China. Lets exploit it to spread the word of God! Even if it has to be the street vendors selling copies of audio bibles for a buck. Or maybe a brave athlete or coach person can risk arrest and torture and hand out free bible CDs and DVDs. If you can&#8217;t get em&#8217; on the plane, you can use the internet, and proxy sites or P2P or anti-TCP-reset software can bypass the censors.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.YeshuaAgapao.com/blog/2008/04/07/one-bible-per-person-rumor-at-beijing-china-olympic-games-2008-emule-to-the-rescue/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Super Comet - High velocity dinosaur-killer sized comet impact</title>
		<link>http://www.YeshuaAgapao.com/blog/2008/03/20/super-comet-high-velocity-dinosaur-killer-sized-comet-impact/</link>
		<comments>http://www.YeshuaAgapao.com/blog/2008/03/20/super-comet-high-velocity-dinosaur-killer-sized-comet-impact/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 07:18:22 +0000</pubDate>
		<dc:creator>YeshuaAgapao</dc:creator>
		
	<category>Science</category>
	<category>Church/Bible</category>
		<guid isPermaLink="false">http://www.YeshuaAgapao.com/blog/2008/03/20/super-comet-high-velocity-dinosaur-killer-sized-comet-impact/</guid>
		<description><![CDATA[[巨型彗星：撞击之后].Science.Channel.Super.Comet.After.The.Impact.WS.DSR.XviD-K4RM4.avi (eMule P2P filesharing ED2K link to download the entire discovery / Science channel show - TV-Rip)
I got an estimate from the Earth Impact Effects Program for this show.  The show said that the comet&#8217;s velocity was 135,000+mph and it was 8 miles in size and its impact produced a 60 mile transient crater, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="ed2k://|file|[%E5%B7%A8%E5%9E%8B%E5%BD%97%E6%98%9F%EF%BC%9A%E6%92%9E%E5%87%BB%E4%B9%8B%E5%90%8E].Science.Channel.Super.Comet.After.The.Impact.WS.DSR.XviD-K4RM4.avi|729573376|B3DF3BAA556DE15588764554806E9B22|p=5AC45B6662E595264D88A5AB58CEE03A:8B79480B8E811AD4F2E291390611DA70:F432BF545E0F7E28BFCF76243CF8942F:CC97CBC6B785D996C37845AFA4B86B6B:9806562C20525DD78C9FC390B55848A9:81DBC8A26E2E2F8C8AE5E3D113151743:9C63AA1751661C0B599ECB95BC8D658C:124DF800358860501A0FD08A94785B00:53527B841FCCC1232B41B6C9B3589D32:58BBD14E7DDCF408F92E7295BBE70B68:2D3A5BB6896109B3FF147F0F8BCF2F43:03D58D214D9DAEB3915328F2B57C2185:3E127F3FF310EC32D9ED4C523EAB1A18:AE47C342556FA8FB2EE77FD64C40F1EA:9C56FEDE0E8FDC8F199FFB95BE413CA5:8A24E0BF3B593E1E887061A11928BFBD:DFFED685CCF5678325F25F8FEEC6905F:8CE7FC1E36896670F239B6FEDFF9E908:EEFDFA4975D58E5AAD4D590B697B5F4F:4CE115491F0C924DF72D03E37A61545C:816079BFDD46D0C3AC18CC9103268155:2E3D24416DCB86F0D547DD19FADFCC00:17ED3C45AC68E6368E76C2683F1CD83C:0A419E6F076114FAF531BE4C27071BC5:609E54CE38824D0D0B511F77859CDEEA:B66F6A3ED46CB413FFD312F360362620:82AB4799EDE0E868D79F21477E92D2E9:422429387FF3C427BB7CA126BC607E2B:4DA161C0A56F2E31BAB3B01ED4DFF609:B53FBC87238F9B481D59942F3ED87FCD:0B812E72B1536D058E90781EA6BB23BE:DFA61F3A088519C81578AA2F4CEA9EAE:84331BF52DD3BFC1EA3E0F2A2F6E174E:6E6597EE3BA2AEC43F9CB0FFAC8DBE0A:BD871D7453799D2CA3360D73BC483F90:B99A5F5752E2E15E3651957EA9A4D83C:B9630DE347D155BB6853FCF4135E3B3E:88FDBE3ADAEC5FDEE741463AFEB47218:55AEE74B6D6B009D8DB56E7F8E78C76E:B36964FF3A0EE7322BAB0E84330DEC2A:1DA3F3C8BF2A201D1018E282D25B651B:FCCAD83C4E1570332DA2903C6E251430:605A3EC424258CC3AB1E707DA7574D37:1CA0E1F3CA57074A759B2A1DF9484A9B:40534E117B7C8B2EF016836E5B272083:886B217E85DB95FE00C9BBB73C3A6610:F517A21FAFF1F704DAF640AF7C940FF5:F93EB871E3B050427B806379FA4EFD37:C60738C843C81096E86D801720AF7E0C:3781F75B5F87902E223B102A6424AE73:727F87B35549E7DE4930C2D8E65FDCAE:BE62013FC567BCDA38F2821321D00CF4:5B8B165E948C092F7E325929CD254637:7EB0EEB227F1201D6E5490076E8403C6:B34A4A5D935D47221C5D7345D4DE5E4D:540E3431FC6390CA4B3DD08EF176F06A:F978B6C845DA41F40DBC1E0E367860EE:532F7BA0CCA4A51BCFADA9E625D6BBE0:139BBBEC646AD778EB500A782E94B9C8:9F3BA4C73A50469E9728F5B896E1EEDB:EB5CE284E87337F608A217A7129D7AC3:F8C034264129526EBAA70962971A5286:252FD134848A9FEF0B0A956D8DD88444:E70B2F5BCC93EEC2E08779F9AD9F70EF:992570B72A68B3E5B5450AD77E9A8F82:D944E38ADDBB665FFAA2316B631BEDE6:6B5136F5DD7960A95F3F9FAD93FBC277:7CDFBF14F90367B0099CBAE886B8CE37:03C4F22EFB2218BE590A5048E4FFF01A:BD986BD87FC7F16C01C076F45B12672B:71F1C9211A4248985CCA9BBA592D17F4:AF53A19D37FDD7E8F558485C22FEEAB6:852D260DA142B43AAE45196E8BA615FE:A0ABC453307A76F83DFD9BFBFB41A85C:F561449230CAEB81480F8E0455B81F82|h=M6SEF4POIOPNSB4MMJNMXHSMR7X34FAA|/">[巨型彗星：撞击之后].Science.Channel.Super.Comet.After.The.Impact.WS.DSR.XviD-K4RM4.avi</a> (<a target="_blog" href="http://emule-project.net">eMule P2P filesharing</a> ED2K link to download the entire discovery / Science channel show - TV-Rip)</p>
<p>I got an estimate from the <a target="_blog" href="http://www.lpl.arizona.edu/impacteffects/">Earth Impact Effects Program</a> for this show.  The show said that the comet&#8217;s velocity was 135,000+mph and it was 8 miles in size and its impact produced a 60 mile transient crater, 100 mile final crater, and at the end, the pool of lava was 125 miles and had an instant-incineration radius of 1000 miles (this computation had incineration out to about 1100 miles).  I think the trumpet judgments in <a target="_blog" href="http://www.blueletterbible.org/cgi-bin/tools/printer-friendly.pl?book=Rev&#038;chapter=8&#038;version=HNV#6">revelation chapter 8 (Christian Holy Bible)</a> may be a similar impact of a smaller comet fragmented in two large chunks (2nd and 3rd trumpet) and the 3rd chunk shattered in tiny pieces (first trumpet).  I&#8217;m not firm on that belief though.  Just the best fit for a fairly &#8216;natural&#8217; divine judgment phase of the tribulation.</p>
<h1 align="center"><font color="#000000">Impact Effects</font></h1>
<h2 align="center">Match the Science Channel Super Comet Show</h2>
<h3 align="center">Robert Marcus, <a href="http://www.lpl.arizona.edu/People/Faculty/melosh.html">H. Jay Melosh</a>, and <a href="http://www.lpl.arizona.edu/~gareth/gareth.html">Gareth Collins</a></h3>
<p>Please note:  the results below are estimates based on current (limited) understanding of the impact process and come with large uncertainties;  they should be used with caution, particularly in the case of peculiar input parameters.  All values are given to three significant figures but this does not reflect the precision of the estimate.  For more information about the uncertainty associated with our calculations and a full discussion of this program, please refer to this <a href="http://www.lpl.arizona.edu/~marcus/CollinsEtAl2005.pdf">article</a></p>
<dl>
<dt>
</dt>
<h2>Your Inputs:</h2>
<dd>Distance from Impact:  <strong>1625.00 km = 1009.12 miles</strong>  </dd>
<dd>Projectile Diameter:  <strong>12875.00  m = 42230.00 ft = 8.00 miles </strong> </dd>
<dd>Projectile Density:  <strong>1000 kg/m<sup>3</sup></strong>  </dd>
<dd>Impact Velocity:  <strong>60.50 km/s = 37.57 miles/s</strong> </dd>
<dd>Impact Angle:  <strong>60 degrees</strong> </dd>
<dd>Target Density:  <strong>1000 kg/m<sup>3</sup></strong> </dd>
<dd>Target Type:  Liquid Water of depth 300.00 meters, over typical rock. </dd>
</dl>
<dl>
<dt>
</dt>
<h2>Energy:</h2>
<dd>Energy before atmospheric entry: <strong>2.05 x 10<sup>24</sup> Joules</strong>  = <strong>4.89 x 10<sup>8</sup> MegaTons TNT</strong></dd>
<dd>The average interval between impacts of this size somewhere on Earth during the last 4 billion years is <strong>5.4 x 10<sup>8</sup>years</strong></dd>
</dl>
<dl>
<dt>
</dt>
<h2>Major Global Changes:</h2>
<dd>The Earth is not strongly disturbed by the impact and loses negligible mass.</dd>
<dd>The impact does not make a noticeable change in the Earth&#8217;s rotation period or the tilt of its axis.</dd>
<dd>The impact does not shift the Earth&#8217;s orbit noticeably.</dd>
</dl>
<dl>
<dt>
</dt>
<h2>Crater Dimensions:</h2>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterexp.html#crater">What does this mean?</a> </dd>
<dd>The crater opened in the water has a diameter of <strong>160 km = 99.7 miles</strong></dd>
<dd>
</dd>
<dd>For the crater formed in the seafloor:	</dd>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterglos.html#transient">Transient Crater</a> Diameter:  <strong>96.6 km = 60 miles</strong></dd>
<dd>Transient Crater Depth:  <strong>34.2 km = 21.2 miles</strong></dd>
<dd>
</dd>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterglos.html#final">Final Crater</a> Diameter: <strong>176 km = 109 miles</strong></dd>
<dd>Final Crater Depth:  <strong>1.4 km = 0.871 miles</strong></dd>
</dl>
<dd>The crater formed is a <a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterglos.html#complex">complex crater</a>. </dd>
<dd>The volume of the target melted or vaporized is 14700 km<sup>3</sup> = 3520 miles<sup>3</sup>  </dd>
<dd>Roughly half the melt remains in the crater , where its average thickness is 2 km = 1.24 miles
<dl>
<dt>
</dt>
<h2>Thermal Radiation:</h2>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterexp.html#thermal">What does this mean?</a> </dd>
<dd>Time for maximum radiation:  <strong>4.2 seconds </strong>after impact</dd>
<dd>
</dd>
<dd>Visible fireball radius:  <strong>47.5 km = 29.5 miles </strong></dd>
<dd>The fireball appears <strong>6.65</strong> times larger than the sun</dd>
<dd>Thermal Exposure:  <strong>3.49 x 10<sup>7</sup> Joules/m<sup>2</sup></strong></dd>
<dd>Duration of Irradiation:  <strong>3300 seconds</strong></dd>
<dd>Radiant flux (relative to the sun):  <strong>10.6</strong></dd>
<dd>
</dd>
<dd>Effects of Thermal Radiation:</p>
<ul>Clothing ignites</p>
<p>Much of the body suffers third degree burns</p>
<p>Newspaper ignites</p>
<p>Plywood flames</p>
<p>Deciduous trees ignite</p>
<p>Grass ignites</ul>
</dd>
</dl>
<dl>
<dt>
</dt>
<h2>Seismic Effects:</h2>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterexp.html#seismic">What does this mean?</a>The major seismic shaking will arrive at approximately <strong>325 seconds</strong>. </dd>
<dd>Richter Scale Magnitude:  <strong>10.4</strong> <strong>(This is greater than any earthquake in recorded history)</strong></dd>
<dd>Mercalli Scale Intensity at a distance of 1625 km:</p>
<ul>IV.  Felt indoors by many, outdoors by few during the day.  At night, some awakened.  Dishes, windows, doors disturbed; walls make cracking sound.  Sensation like heavy truck striking building.  Standing motor cars rocked noticeably.</p>
<p>V.  Felt by nearly everyone; many awakened.  Some dishes, windows broken.  Unstable objects overturned.  Pendulum clocks may stop.</ul>
</dd>
</dl>
<dl>
<dt>
</dt>
<h2>Ejecta:</h2>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterexp.html#ejecta">What does this mean?</a>The ejecta will arrive approximately <strong>666 seconds </strong> after the impact. </dd>
<dd>Average Ejecta Thickness: <strong>18.1 cm = 7.13 inches</strong> </dd>
<dd>Mean Fragment Diameter:  <strong>748 micrometers = 29.5 1/1000 of an inch</strong> </dd>
</dl>
<dl>
<dt>
</dt>
<h2>Air Blast:</h2>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterexp.html#airblast">What does this mean?</a>The air blast will arrive at approximately <strong>4920 seconds</strong>. </dd>
<dd>Peak Overpressure:  <strong>149000 Pa = 1.49 bars = 21.2 psi</strong></dd>
<dd>Max wind velocity:  <strong>233 m/s = 521 mph</strong></dd>
<dd>Sound Intensity:  <strong>103 dB</strong> <strong>(May cause ear pain)</strong></dd>
<dd>Damage Description:</p>
<ul>Multistory wall-bearing buildings will collapse.</p>
<p>Wood frame buildings will almost completely collapse.</p>
<p>Highway truss bridges will collapse.</p>
<p>Glass windows will shatter.</p>
<p>Up to 90 percent of trees blown down; remainder stripped of branches and leaves.</ul>
</dd>
</dl>
<p><a target="_blank" href="http://www.lpl.arizona.edu/~marcus/CollinsEtAl2005.pdf">Tell me more&#8230;</a>Click here for a pdf document that details the observations, assumptions, and equations upon which this program is based.  It 	describes our approach to quantifying the important impact processes that might affect the people, buildings, and landscape in the 	vicinity of an impact event and discusses the uncertainty in our predictions.  The processes included are:  atmospheric entry, impact 	crater formation, fireball expansion and thermal radiation, ejecta deposition, seismic shaking, and the propagation of the atmospheric 	blast wave.</p>
<hr /><br />
<font size="1">Earth Impact Effects Program Copyright 2004, Robert Marcus, H.J. Melosh, and G.S. Collins<br />
These results come with ABSOLUTELY NO WARRANTY</font></dd>
<h1 align="center"><font color="#000000">Impact Effects</font></h1>
<h2 align="center">Mini 2km comet-fragment</h2>
<h4 align="center">with energy equalling 125% of that of 200,000 5-megaton nukes at recommended velocity (50 km/s instead of 60.5) and slightly shallower 45 angle into deeper ocean - <a target="_blog" href="http://www.blueletterbible.org/cgi-bin/tools/printer-friendly.pl?book=Rev&#038;chapter=8&#038;version=HNV#6">2nd trumpet</a>)</h4>
<h3 align="center">Robert Marcus, <a href="http://www.lpl.arizona.edu/People/Faculty/melosh.html">H. Jay Melosh</a>, and <a href="http://www.lpl.arizona.edu/~gareth/gareth.html">Gareth Collins</a></h3>
<p>Please note:  the results below are estimates based on current (limited) understanding of the impact process and come with large uncertainties;  they should be used with caution, particularly in the case of peculiar input parameters.  All values are given to three significant figures but this does not reflect the precision of the estimate.  For more information about the uncertainty associated with our calculations and a full discussion of this program, please refer to this <a href="http://www.lpl.arizona.edu/~marcus/CollinsEtAl2005.pdf">article</a></p>
<dl>
<dt>
</dt>
<h2>Your Inputs:</h2>
<dd>Distance from Impact:  <strong>400.00 km = 248.40 miles</strong>  </dd>
<dd>Projectile Diameter:  <strong>2000.00  m = 6560.00 ft = 1.24 miles </strong> </dd>
<dd>Projectile Density:  <strong>1000 kg/m<sup>3</sup></strong>  </dd>
<dd>Impact Velocity:  <strong>50.00 km/s = 31.05 miles/s</strong> </dd>
<dd>Impact Angle:  <strong>45 degrees</strong> </dd>
<dd>Target Density:  <strong>1000 kg/m<sup>3</sup></strong> </dd>
<dd>Target Type:  Liquid Water of depth 1000.00 meters, over typical rock. </dd>
</dl>
<dl>
<dt>
</dt>
<h2>Energy:</h2>
<dd>Energy before atmospheric entry: <strong>5.24 x 10<sup>21</sup> Joules</strong>  = <strong>1.25 x 10<sup>6</sup> MegaTons TNT</strong></dd>
<dd>The average interval between impacts of this size somewhere on Earth during the last 4 billion years is <strong>5.4 x 10<sup>6</sup>years</strong></dd>
</dl>
<dl>
<dt>
</dt>
<h2>Major Global Changes:</h2>
<dd>The Earth is not strongly disturbed by the impact and loses negligible mass.</dd>
<dd>The impact does not make a noticeable change in the Earth&#8217;s rotation period or the tilt of its axis.</dd>
<dd>The impact does not shift the Earth&#8217;s orbit noticeably.</dd>
</dl>
<dl>
<dt>
</dt>
<h2>Crater Dimensions:</h2>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterexp.html#crater">What does this mean?</a> </dd>
<dd>The crater opened in the water has a diameter of <strong>32.2 km = 20 miles</strong></dd>
<dd>
</dd>
<dd>For the crater formed in the seafloor:	</dd>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterglos.html#transient">Transient Crater</a> Diameter:  <strong>13.1 km = 8.11 miles</strong></dd>
<dd>Transient Crater Depth:  <strong>4.62 km = 2.87 miles</strong></dd>
<dd>
</dd>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterglos.html#final">Final Crater</a> Diameter: <strong>18.3 km = 11.4 miles</strong></dd>
<dd>Final Crater Depth:  <strong>0.71 km = 0.441 miles</strong></dd>
</dl>
<dd>The crater formed is a <a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterglos.html#complex">complex crater</a>. </dd>
<dd>The volume of the target melted or vaporized is 5.03 km<sup>3</sup> = 1.21 miles<sup>3</sup>  </dd>
<dd>Roughly half the melt remains in the crater , where its average thickness is 37.6 meters = 123 feet
<dl>
<dt>
</dt>
<h2>Thermal Radiation:</h2>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterexp.html#thermal">What does this mean?</a> </dd>
<dd>Time for maximum radiation:  <strong>0.697 seconds </strong>after impact</dd>
<dd>
</dd>
<dd>Visible fireball radius:  <strong>22 km = 13.6 miles </strong></dd>
<dd>The fireball appears <strong>12.5</strong> times larger than the sun</dd>
<dd>Thermal Exposure:  <strong>8.39 x 10<sup>6</sup> Joules/m<sup>2</sup></strong></dd>
<dd>Duration of Irradiation:  <strong>448 seconds</strong></dd>
<dd>Radiant flux (relative to the sun):  <strong>18.7</strong> (Flux from a burner on full at a distance of 10 cm)</dd>
<dd>
</dd>
<dd>Effects of Thermal Radiation:</p>
<ul>Much of the body suffers third degree burns</p>
<p>Newspaper ignites</p>
<p>Plywood flames</p>
<p>Deciduous trees ignite</p>
<p>Grass ignites</ul>
</dd>
</dl>
<dl>
<dt>
</dt>
<h2>Seismic Effects:</h2>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterexp.html#seismic">What does this mean?</a>The major seismic shaking will arrive at approximately <strong>80 seconds</strong>. </dd>
<dd>Richter Scale Magnitude:  <strong>8.1</strong></dd>
<dd>Mercalli Scale Intensity at a distance of 400 km:</p>
<ul>VI.  Felt by all, many frightened.  Some heavy furniture moved; a few instances of fallen plaster.  Damage slight.</p>
<p>VII.  Damage negligible in buildings of good design and construction; slight to moderate in well-built ordinary structures; considerable damage in poorly built or badly designed structures; some chimneys broken.</ul>
</dd>
</dl>
<dl>
<dt>
</dt>
<h2>Ejecta:</h2>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterexp.html#ejecta">What does this mean?</a>The ejecta will arrive approximately <strong>296 seconds </strong> after the impact. </dd>
<dd>At your position the ejecta arrives in scattered fragments</dd>
<dd>Average Ejecta Thickness:  <strong>4.05 mm = 0.159 inches</strong> </dd>
<dd>Mean Fragment Diameter:  <strong>2.99 mm = 0.118 inches</strong> </dd>
</dl>
<dl>
<dt>
</dt>
<h2>Air Blast:</h2>
<dd><a target="blank" href="http://www.lpl.arizona.edu/~marcus/craterexp.html#airblast">What does this mean?</a>The air blast will arrive at approximately <strong>1210 seconds</strong>. </dd>
<dd>Peak Overpressure:  <strong>46000 Pa = 0.46 bars = 6.53 psi</strong></dd>
<dd>Max wind velocity:  <strong>91.8 m/s = 205 mph</strong></dd>
<dd>Sound Intensity:  <strong>93 dB</strong> <strong>(May cause ear pain)</strong></dd>
<dd>Damage Description:</p>
<ul>Multistory wall-bearing buildings will collapse.</p>
<p>Wood frame buildings will almost completely collapse.</p>
<p>Glass windows will shatter.</p>
<p>Up to 90 percent of trees blown down; remainder stripped of branches and leaves.</ul>
</dd>
</dl>
<p><a target="_blank" href="http://www.lpl.arizona.edu/~marcus/CollinsEtAl2005.pdf">Tell me more&#8230;</a>Click here for a pdf document that details the observations, assumptions, and equations upon which this program is based.  It 	describes our approach to quantifying the important impact processes that might affect the people, buildings, and landscape in the 	vicinity of an impact event and discusses the uncertainty in our predictions.  The processes included are:  atmospheric entry, impact 	crater formation, fireball expansion and thermal radiation, ejecta deposition, seismic shaking, and the propagation of the atmospheric 	blast wave.</p>
<hr /><br />
<font size="1">Earth Impact Effects Program Copyright 2004, Robert Marcus, H.J. Melosh, and G.S. Collins<br />
These results come with ABSOLUTELY NO WARRANTY</font></dd>
]]></content:encoded>
			<wfw:commentRSS>http://www.YeshuaAgapao.com/blog/2008/03/20/super-comet-high-velocity-dinosaur-killer-sized-comet-impact/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Friend hurt? Wanna ride in the ambulance or chopper in support of him?</title>
		<link>http://www.YeshuaAgapao.com/blog/2008/02/20/friend-hurt-wanna-ride-in-the-ambulance-or-chopper-in-support-of-him/</link>
		<comments>http://www.YeshuaAgapao.com/blog/2008/02/20/friend-hurt-wanna-ride-in-the-ambulance-or-chopper-in-support-of-him/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 16:57:17 +0000</pubDate>
		<dc:creator>YeshuaAgapao</dc:creator>
		
	<category>Government / Corporate Paranoia</category>
		<guid isPermaLink="false">http://www.YeshuaAgapao.com/blog/2008/02/20/friend-hurt-wanna-ride-in-the-ambulance-or-chopper-in-support-of-him/</guid>
		<description><![CDATA[Expect to be billed as a patient being treated.  $550 abouts in the city of Pheonix, AZ for a standard ambulance.  The cost will be more if its an ICU ambulance or chopper.  It doesn&#8217;t matter if its your kid that is riding either.
Larry Williams at work is dealing with this problem [...]]]></description>
			<content:encoded><![CDATA[<p>Expect to be billed as a patient being treated.  $550 abouts in the city of Pheonix, AZ for a standard ambulance.  The cost will be more if its an ICU ambulance or chopper.  It doesn&#8217;t matter if its your kid that is riding either.</p>
<p>Larry Williams at work is dealing with this problem right now.  Escalating to a commissioner or something like that.  His daughter rode with her car accident victim friend, named Linda, and he got a $537 bill and a collections referral threat.  She was compeletly ignorant of any intention to bill also.  They reversed the bill but he had to go through some phone red-tape with much assertiveness to achieve that.</p>
<p>So I would expect the same if your wife or your friend or your kid gets hurt any you want to ride along in the ambulance, at least in Phoenix AZ.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.YeshuaAgapao.com/blog/2008/02/20/friend-hurt-wanna-ride-in-the-ambulance-or-chopper-in-support-of-him/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>I like this article bit from HousingDoom.com</title>
		<link>http://www.YeshuaAgapao.com/blog/2008/02/06/i-like-this-article-bit-from-housingdoomcom/</link>
		<comments>http://www.YeshuaAgapao.com/blog/2008/02/06/i-like-this-article-bit-from-housingdoomcom/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 01:25:08 +0000</pubDate>
		<dc:creator>YeshuaAgapao</dc:creator>
		
	<category>Government / Corporate Paranoia</category>
		<guid isPermaLink="false">http://www.YeshuaAgapao.com/blog/2008/02/06/i-like-this-article-bit-from-housingdoomcom/</guid>
		<description><![CDATA[As long as the goverment and the people keep thinking this way, this country is doomed.

President Bush- It Ain’t Gonna Work
The government doesn’t want us to bank that money or use it to pay off debts. It believes we will go out and spend the money, and that will make our houses worth a lot [...]]]></description>
			<content:encoded><![CDATA[<p>As long as the goverment and the people keep thinking this way, this country is doomed.</p>
<blockquote>
<h2><strong><a class="post-title" rel="bookmark" title="Permanent Link to President Bush- It Ain’t Gonna Work" href="http://housingdoom.com/2008/02/04/president-bush-it-aint-gonna-work/">President Bush- It Ain’t Gonna Work</a></strong></h2>
<p><em>The government doesn’t want us to bank that money or use it to pay off debts. It believes we will go out and spend the money, and that will make our houses worth a lot again. The idea is this: Say, for instance, I got $600, and I spent it on strippers. Those strippers would then buy clothes at Bebe, and the person who owns Bebe would buy the crappy house I overpaid for and get me out of the financial predicament caused by unscrupulous mortgage lenders and not by my addiction to strip joints. </em></p></blockquote>
<blockquote><p><em>This might soften the recession if Milton Friedman hadn’t proved 50 years ago that most people base spending decisions on long-term income projections. Only poor people immediately spend checks they get in the mail. And if there’s one thing I’m sure of, it’s that poor people aren’t going to save the economy. Also, if I know anything about the workings of the federal government, the process of writing and sending a $600 check is going to cost about $600.</em></p></blockquote>
<p><span id="more-1208" /></p>
<p>President Bush, it ain’t gonna work.  Priming the pump isn’t very useful when the well is dry.  Until &#8220;produce and earn&#8221; replaces &#8220;borrow and spend&#8221;, we aren’t going to &#8220;recover from this period of uncertainty- no matter how fast Congress cuts that check
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.YeshuaAgapao.com/blog/2008/02/06/i-like-this-article-bit-from-housingdoomcom/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Cheap Stuff At Penton Media (SQL Server Magazine / Windows IT Pro)</title>
		<link>http://www.YeshuaAgapao.com/blog/2007/09/24/cheap-stuff-at-penton-media-sql-server-magazine-windows-it-pro/</link>
		<comments>http://www.YeshuaAgapao.com/blog/2007/09/24/cheap-stuff-at-penton-media-sql-server-magazine-windows-it-pro/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 06:33:03 +0000</pubDate>
		<dc:creator>YeshuaAgapao</dc:creator>
		
	<category>Computers / Technology</category>
		<guid isPermaLink="false">http://www.YeshuaAgapao.com/blog/2007/09/24/cheap-stuff-at-penton-media-sql-server-magazine-windows-it-pro/</guid>
		<description><![CDATA[Legit Link in Email (Promotion ID 18002804) &#8212; https://store.pentontech.com/index.cfm?s=9&#038;cid=220&#038;promotionid=18002804&#038;code=
Now start screwing with the querystring. Some promotion ids redirect to other promotion ids.  128 and 18002792 are particularly good.  18002792 has $10 for 1 year subscription of the Zinio-DRM digital edition of SQL Server Magazine.  128 has $30 to all the print magazines, [...]]]></description>
			<content:encoded><![CDATA[<p>Legit Link in Email (Promotion ID 18002804) &#8212; <a target="_blog" href="https://store.pentontech.com/index.cfm?s=9&#038;cid=220&#038;promotionid=18002804&#038;code=">https://store.pentontech.com/index.cfm?s=9&#038;cid=220&#038;promotionid=18002804&#038;code=</a></p>
<p>Now start screwing with the querystring. Some promotion ids redirect to other promotion ids.  128 and 18002792 are particularly good.  18002792 has $10 for 1 year subscription of the Zinio-DRM digital edition of SQL Server Magazine.  128 has $30 to all the print magazines, but the biggie is $30 to the Master CDs and $140 for the Windows IT Pro VIP CD - The Whole Enchilada (Legit link is $280)</p>
<p>Promotion ID 128 - <a href="https://store.pentontech.com/index.cfm?s=9&#038;cid=220&#038;promotionid=128&#038;code=">https://store.pentontech.com/index.cfm?s=9&#038;cid=220&#038;promotionid=128&#038;code=</a></p>
<p>Promotion ID 18002792 - <a target="_blog" href="https://store.pentontech.com/index.cfm?s=9&#038;cid=220&#038;promotionid=18002792&#038;code=">https://store.pentontech.com/index.cfm?s=9&#038;cid=220&#038;promotionid=18002792&#038;code=</a></p>
<p>Oh a bad ID is blank content with a order form.  The Redirects to Promotion ID 128 is intentional.  They must be smart to market to querystring munchkins <img src='http://www.YeshuaAgapao.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I think I will use both 18002804 for the print and Itzik Ben-Gan black-belt CD and then use 128 to get the SQL Master CD for 30 bucks.  Itzik Ben-Gan is getting too much attention.  I want Joe Celko to get some fame too.  Hopefully with less need of corporate tyranny too.  All of Ben-Gan&#8217;s books (Plus Inside SQL Server 2005 Storage Engine) are rampant on eMule, all unauthorized, leaked e-Books direct from microsoft employees.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.YeshuaAgapao.com/blog/2007/09/24/cheap-stuff-at-penton-media-sql-server-magazine-windows-it-pro/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Twelve BattleMech Designs, 2 Munchkinning Guides, and 1 MechWarrior (CBT:RPG) Character</title>
		<link>http://www.YeshuaAgapao.com/blog/2007/09/15/twelve-battlemech-designs-2-munchkinning-guides-and-1-mechwarrior-cbtrpg-character/</link>
		<comments>http://www.YeshuaAgapao.com/blog/2007/09/15/twelve-battlemech-designs-2-munchkinning-guides-and-1-mechwarrior-cbtrpg-character/#comments</comments>
		<pubDate>Sun, 16 Sep 2007 03:50:33 +0000</pubDate>
		<dc:creator>YeshuaAgapao</dc:creator>
		
	<category>PnP RPGs &#038; Wargames</category>
		<guid isPermaLink="false">http://www.YeshuaAgapao.com/blog/2007/09/15/twelve-battlemech-designs-2-munchkinning-guides-and-1-mechwarrior-cbtrpg-character/</guid>
		<description><![CDATA[Got two munchkinning guides (Same as the two posted earlier below), 12 battlemechs, and 1 character for you all.  Cost wasn&#8217;t prioritized much in the design, but two ended up better off without XL engines and thus are economical . Huaman Leung Chung, the MechWarrior (CBT:RPG) character pilots the BobCat. I intended him to [...]]]></description>
			<content:encoded><![CDATA[<p>Got two munchkinning guides (Same as the two posted earlier below), 12 battlemechs, and 1 character for you all.  Cost wasn&#8217;t prioritized much in the design, but two ended up better off without XL engines and thus are economical . Huaman Leung Chung, the MechWarrior (CBT:RPG) character pilots the BobCat. I intended him to pilot the Zephyr but he rolled a ZPH-1A Tarantula for his military-issued &#8216;Mech so I had to change his owned, inherited Mech to the BobCat, which is a Lion downgraded to 35 tons and turned out to be better overall than the Lion (The Quark is a quick 12MP addon to round out the design count at 12).</p>
<p>The BVs are quite high.  The Tarrasque has more BV than any of FanPro or FASA&#8217;s stock BattleMechs, while Shredder, Punisher, and Blaster Master exceed all but the two Pillager designs.  I am assuming that FanPro&#8217;s current Master Battle Value Tables 3.0 are using BV2 (Total Warfare) rather than the original BV system (Master Rules) as these &#8216;Mechs&#8217; BVs are calculated according to BV2 from the TechManual.  Most of these Mechs munchkin on gauss rifles and medium lasers though some go with rotary AC or melee or ER-PPC.  Shredder (TSM for hatchet), and expecially Blaster Master (TSM for mobility) can precisely control their heat scales to keep it right at 9 for maximum utilization of their Triple-Strength-Myomer.</p>
<p><font size="+2"><a href="http://www.YeshuaAgapao.com/files/Other/BattleTech.-.2.BT.Munchkinning.Guides.+.12.Total.Warfare._.TechManual.Mech.Designs.+.1.CBT.RPG.3rd.Ed.MechWarrior.Character.-.Classic.FASA.FanPro.rar">DOWNLOAD</a></font> (12.3KB RAR; 16 .txt files totalling 53.24KB)</p>
<p>Here is the summary (it is in the archive too - BattleMech_Summary.txt):</p>
<pre><font face="courier new"> Summary table 1:

Name            Tech    Class   Tons    BV      BV/ton  Cost        Cost/BV     Cost/ton
Tarrasque       IS/2    Assault 100     2,810   28.10   $14,892,000 $5,299.64   $148,920.00
Shredder        IS/2    Assault 100     2,529   25.29   $14,731,000 $5,824.83   $147,310.00
Punisher        IS/2    Assault 100     2,472   24.72   $24,134,500 $9,763.15   $241,345.00
Blaster Master  IS/2    Assault 85      2,530   29.76   $24,615,945 $10,679.37  $289,599.35
Cyborg          IS/2    Heavy   70      2,220   31.71   $16,133,040 $7,267.14   $230,472.00
Disciple        IS/2    Medium  55      1,775   32.27   $13,801,200 $7,775.32   $250,930.91
Falcon          IS/2    Medium  50      1,647   32.94   $12,802,001 $7,772.92   $256,040.02
Lion            IS/2    Medium  40-Quad 1,455   36.38   $8,558,667  $5,882.25   $213,966.68
Zephyr          IS/2    Light   35      1,482   42.34   $6,900,098  $4,655.94   $197,145.66
BobCat          IS/2    Light   35-Quad 1,403   40.09   $6,856,762  $4,887.21   $195,907.49
Tacht           IS/2    Light   30      1,156   38.53   $6,474,000  $5,600.35   $215,800.00
Quark           IS/2    Light   25      689     27.56   $5,634,375  $8,177.61   $225,375.00

Summary table 2:
_               W-R-J       Weap+Mv Tot,Cri 1/5/10/15/20    Eqp/Max
Name            Movement    HeatGen HeatSin Damage No-WHeat Armor   Equipment Summary
Tarrasque       3-5-3       20+3    20,0    30/60/30/30/30  304/307 2GR(40),6ML,C3i,ECM
Shredder        3(4)-5(6)-3 64+3    24,0    90/40/20/20/0   304/307 TSM,Hat,2PPC,8ML,10SL,C3i,ECM
Punisher        3-5-3       34+3    32,8    3/80/80/80/0    304/307 2PPC,2R-AC/5(100),1ERSL,C3i,ECM
Blaster Master  4(5)-6(8)-4 62+4    34,8    53/53/20/20/20  263/263 TSM,2ERPPC,10ML,1ERSL,C3i,ECM
Cyborg          5-8-5       19+5    20,0    30/45/15/15/15  216/217 1GR(24),10ML,1ERSL,C3i,ECM
Disciple        6-9-6       30+6    30,4    50/50/0/0/0     184/185 10ML,C3i,ECM
Falcon          7-11-7      24+7    26,0    40/40/0/0/0     161/169 8ML,C3i
Lion            8-12(16)-8  18+8    20,0    20/20/15/0/0    152/153 MASC,3ERML,1ML
Zephyr          8-12(16)-8  20+8    22,0    33/33/0/0/0     118/119 MASC,6ML,1ERSL
BobCat          8-12(16)-8  19+8    20,0    28/28/5/0/0     127/127 MASC,4ML,1ERML,1ERSL
Tacht           10-15-10    16+10   20,0    20/20/10/0/0    98/105  2ERML,2ML
Quark           12-18-12    10+12   20,0    10/10/10/0/0    26/89   2ERML

Notes:

*Tarrasque, Punisher, Shredder, Blaster Master, Cyborg, Disciple, and Falcon have C3i computers.
C3i computers add 5% of the BV of all connected lancemates to its own BV at combat-time.

*These BattleMechs were designed by and their costs + battle values (BV2) were calculated according to the rules
in Classic Battletech TechManual (FanPro 35103; <a target="_blog" href="http://battlecorps.com/catalog/product_info.php?products_id=1874">Buy PDF</a>; <a target="_blog" href="http://battlecorps.com/catalog/product_info.php?products_id=1876">Buy HardCopy</a>; <a target="_blog" href="http://battlecorps.com/catalog/product_info.php?products_id=1735">Buy Both</a>; <a href="ed2k://|file|BattleTech%20-%20Total%20Warfare%20-%20FanPro%2035101.pdf|61382167|408B846F916A18ADE794B3A766894B49|p=31971917E5EFF30E85A1E69BB7070969:79AC7F034BE4A0CCC0AE168FBEAF5923:139D803762A1E3DF87424902EC46196F:7D9D58D0478E79EB5C16C19A43495AD5:1456F52F7ABD48AC22345DD2AF7B3A49:F405A58E45085D3B0BA325E182D47118:A4E0A2AE3D7DF3BD2531EDFD14FC8C81|h=IQR5F5LMCAYVGHOFPIZL7563CNVQ56IM|/">Download ED2K</a>) and Classic
Battletech Total Warfare (FanPro 35101; <a target="_blog" href="http://battlecorps.com/catalog/product_info.php?products_id=1736">Buy PDF</a>; <a target="_blog" href="http://battlecorps.com/catalog/product_info.php?products_id=1734">Buy HardCopy</a>; <a target="_blog" href="http://battlecorps.com/catalog/product_info.php?products_id=1875">Buy Both</a>; <a href="ed2k://|file|BattleTech%20-%20TechManual%20-%20Fanpro%2035103%20-%20OCR.pdf|40325712|103F141E15354DB439FD4E905EA2E6E1|p=0DCDA72620E5858E8FA693D4747B0956:5050E1AFDD65808CE9B4E2E9C84B9AE0:0B273BBBB58029F887CB1FE55EB553E8:ADD4809D6F0449F2B1A44F5B0DC9984D:5141E276E8BF9FBA6310CA9E4717A94D|h=AC732XMCANKBX6TNSQXIZLNNJSCJ3ZWB|/">Download ED2K</a>).

*Quark, Tacht, BobCat, Zephyr, Aero, Disciple, and Cyborg have XL gyros.
Also, BobCat, Zephyr, and Falcon have Light Ferro-Fibrous Armor.
XL Gyros and Light Ferro-Fibrous Armor wer formerly level 3 tech items from the &#8216;Master Rules&#8217; /
&#8216;Maximum tech&#8217; era that were moved to level 2 in the current &#8216;Total Warfare&#8217; era.  Other things
that got promoted were improved jump Jets, compact fusion engines, compact and heavy-duty gyros,
targeting computers, and heavy ferro-fibrous armor.

Highlights:

Highest BV:                 Tarrasque
Highest Defensive BV:       Shredder
Highest Raw Weapon BV:      Tarrasque
Highest Offensive BV:       Tarrasque
Easiest Heat Management:    Blaster Master (by Range-Group)
Highest BV/ton:             Zephyr
Highest Defensive BV/ton:   Lion
Highest Weapon BV/ton:      Tarrasque
Highest Offensive BV/ton    Zephyr
Most Cost Effective $/ton:  Shredder
Most Cost Effective $/BV:   Zephyr
Most Cost Effective $/D-BV: Shredder
Most Cost Effective $/W-BV: Tarrasque
Most Cost Effective $/O-BV: Zephyr
</font></pre>
]]></content:encoded>
			<wfw:commentRSS>http://www.YeshuaAgapao.com/blog/2007/09/15/twelve-battlemech-designs-2-munchkinning-guides-and-1-mechwarrior-cbtrpg-character/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Classic BattleTech - Top Charts for FanPro and FASA Stock BattleMechs - Inner Sphere Only</title>
		<link>http://www.YeshuaAgapao.com/blog/2007/09/15/classic-battletech-top-charts-for-fanpro-and-fasa-stock-battlemechs-inner-sphere-only/</link>
		<comments>http://www.YeshuaAgapao.com/blog/2007/09/15/classic-battletech-top-charts-for-fanpro-and-fasa-stock-battlemechs-inner-sphere-only/#comments</comments>
		<pubDate>Sun, 16 Sep 2007 03:29:29 +0000</pubDate>
		<dc:creator>YeshuaAgapao</dc:creator>
		
	<category>PnP RPGs &#038; Wargames</category>
		<guid isPermaLink="false">http://www.YeshuaAgapao.com/blog/2007/09/15/classic-battletech-top-charts-for-fanpro-and-fasa-stock-battlemechs-inner-sphere-only/</guid>
		<description><![CDATA[Some charts have more than 10 because of variations and revisions of the base design.  In these, I &#8216;kept going&#8217; until there was at least 10 unique base designs in the chart.  Only Inner Sphere &#8216;Mechs are included.
 Top 10 Battletech World Mechs by Battle Value (BV)

Name        [...]]]></description>
			<content:encoded><![CDATA[<p>Some charts have more than 10 because of variations and revisions of the base design.  In these, I &#8216;kept going&#8217; until there was at least 10 unique base designs in the chart.  Only Inner Sphere &#8216;Mechs are included.</p>
<pre><font face="courier new"> Top 10 Battletech World Mechs by Battle Value (BV)

Name                BV      Ton Cost        TechBase    Source      BV/ton  Cost/BV     Cost/Ton
Pillager PLG-3Z     2,551   100 22,290,000  IS/Level 2  3055/3058   25.5100 8,737.7499  222,900.0000
Pillager PLG-4Z     2,542   100 12,162,000  IS/Level 2  Upgrades    25.4200 4,784.4217  121,620.0000
Fafnir FNR-5        2,412   100 11,470,000  IS/Level 2  LAAF*       24.1200 4,755.3897  114,700.0000
Marauder II MAD-4S  2,249   100 19,002,000  IS/Level 2  3067        22.4900 8,449.0885  190,020.0000
Fafnir FNR-5B       2,230   100 11,118,000  IS/Level 2  3067        22.3000 4,985.6502  111,180.0000
Devastator DVS-3    2,182   100 22,270,500  IS/Level 2  3055/3058   21.8200 10,206.4620 222,705.0000
Gunslinger GUN-1ERD 2,176   85  16,767,012  IS/Level 2  3055/3058   25.6000 7,05.4283   197,258.9647
Hauptmann HA1-OA    2,172   95  12,478,050  IS/Level 2  3060        22.8632 5,744.9586  131,347.8947
Atlas AS7-S2        2,147   100 19,334,000  IS/Level 2  Upgrades    21.4700 9,005.1234  193,340.0000
Nightstar NSR-9J    2,135   95  20,159,978  IS/Level 2  3055/3058   22.4737 9,442.6126  212,210.2947
Yu Huang Y-H10G     2,132   90  24,033,100  IS/Level 2  3060        23.6889 11,272.5610 267,034.4444

Top 10 Battletech World Mechs by Battle Value per ton (BV/Ton)

Name                BV      Ton Cost        TechBase    Source      BV/ton  Cost/BV     Cost/Ton
Raptor RtX1-OF      959     25  4,589,324   IS/Level 2  3060        38.3600 4,785.5308  183,572.9600
Osiris OSR-4D       1,081   30  5,562,700   IS/Level 2  3067        36.0333 5,145.8834  185,423.3333
Brigand LDt-X1      838     25  2,336,250   IS/Level 2  3067        33.5200 2,787.8878  93,450.0000
Spector SPR-5F      1,141   35  6,136,718   IS/Level 2  3055/3058   32.6000 5,378.3681  175,334.8000
Javelin JVN-11D     977     30  4,504,240   IS/Level 2  Upgrades    32.5667 4,610.2764  150,141.3333
Phoenix Hawk PXH-6D 1,463   45  8,468,290   IS/Level 2  3067        32.5111 5,788.3049  188,184.2222
Enforcer III ENF-6t 1,614   50  8,525,000   IS/Level 2  AFFS*       32.2800 5,281.9083  170,500.0000
Hatchetman HCt-6D   1,424   45  7,667,890   IS/Level 2  Upgrades    31.6444 5,384.7542  170,397.5556
Raptor RtX1-OC      790     25  4,156,511   IS/Level 2  3055/3058   31.6000 5,261.4063  166,260.4400
Osiris OSR-3D       937     30  5,230,550   IS/Level 2  Upgrades*   31.2333 5,582.2305  174,351.6667
Stinger STG-6L      603     20  2,116,240   IS/Level 2  3067        30.1500 3,509.5191  105,812.0000

Top 10 Battletech World Mechs by Cost per Battle Value ($/BV)

Name                BV      Ton Cost        TechBase    Source      BV/ton  Cost/BV     Cost/Ton
Brigand LDt-X1      838     25  2,336,250   IS/Level 2  3067        33.5200 2,787.8878  93,450.0000
Hornet HNt-151      429     20  1,248,700   IS/Level 1  3050        21.4500 2,910.7226  62,435.0000
Hornet HNt-171      491     20  1,441,600   IS/Level 2  3050        24.5500 2,936.0489  72,080.0000
UrbanMech UM-R70    604     30  1,774,825   IS/Level 2  Upgrades    20.1333 2,938.4520  59,160.8333
Hollander BZK-F3    861     35  2,585,160   IS/Level 2  3055/3058   24.6000 3,002.5087  73,861.7143
Eagle EGL-2M        745     25  2,237,916   IS/Level 2  3060        29.8000 3,003.9141  89,516.6400
Commando COM-4H     628     25  1,923,750   IS/Level 2  Periphery*  25.1200 3,063.2962  76,950.0000
Daimyo DMO-4K       1,034   40  3,167,546   IS/Level 2  3060        25.8500 3,063.3907  79,188.6500
Mongoose MON-67     612     25  1,885,729   IS/Level 1  3025/3026   24.4800 3,081.2565  75,429.1600
Eagle EGL-1M        718     25  2,216,979   IS/Level 2  3060        28.7200 3,087.7145  88,679.1600
Garm GRM-01C        960     35  2,968,560   IS/Level 2  AFFS*       27.4286 3,092.2500  84,816.0000

Top 10 Battletech World Mechs by Cost per Ton ($/Ton)

Name                BV      Ton Cost        TechBase    Source      BV/ton  Cost/BV     Cost/Ton
UrbanMech UM-R60    454     30  1,471,925   IS/Level 1  3025/3026   15.1333 3,242.1256  49,064.1667
UrbanMech UM-R60L   443     30  1,581,125   IS/Level 1  3025/3026   14.7667 3,569.1309  52,704.1667
UrbanMech UM-R63    494     30  1,760,525   IS/Level 2  3050        16.4667 3,563.8158  58,684.1667
UrbanMech UM-R70    604     30  1,774,825   IS/Level 2  Upgrades    20.1333 2,938.4520  59,160.8333
Hornet HNt-151      429     20  1,248,700   IS/Level 1  3050        21.4500 2,910.7226  62,435.0000
Blackjack BJ-1DC    718     45  2,973,950   IS/Level 1  3025/3026   15.9556 4,141.9916  66,087.7778
Hunchback HBK-4P    960     50  3,377,876   IS/Level 1  3025/3026   19.2000 3,518.6208  67,557.5200
Centurion CN9-AL    887     50  3,395,876   IS/Level 1  3025/3026   17.7400 3,828.4961  67,917.5200
Hunchback HBK-4H    850     50  3,425,876   IS/Level 1  3025/3026   17.0000 4,030.4424  68,517.5200
Hunchback HBK-4N    843     50  3,437,126   IS/Level 1  3025/3026   16.8600 4,077.2550  68,742.5200
Hunchback HBK-4SP   854     50  3,446,876   IS/Level 1  3025/3026   17.0800 4,036.1546  68,937.5200
Blackjack BJ-1DB    881     45  3,105,175   IS/Level 1  3025/3026   19.5778 3,524.6027  69,003.8889
Centurion CN9-YLW   782     50  3,454,750   IS/Level 1  3025/3026   15.6400 4,417.8389  69,095.0000
Hunchback HBK-4G    851     50  3,467,876   IS/Level 1  3025/3026   17.0200 4,075.0599  69,357.5200
Hatchetman HCt-3F   769     45  3,129,390   IS/Level 1  3025/3026   17.0889 4,069.4278  69,542.0000
Centurion CN9-A     772     50  3,491,500   IS/Level 1  3025/3026   15.4400 4,522.6684  69,830.0000
Blackjack BJ-1      795     45  3,147,225   IS/Level 1  3025/3026   17.6667 3,958.7736  69,938.3333
Centurion CN9-AH    749     50  3,529,750   IS/Level 1  3025/3026   14.9800 4,712.6168  70,595.0000
Vindicator VND-1R   900     45  3,181,082   IS/Level 1  3025/3026   20.0000 3,534.5356  70,690.7111
Enforcer ENF-4R     895     50  3,536,876   IS/Level 1  3025/3026   17.9000 3,951.8168  70,737.5200
Panther PNT-9R      664     35  2,485,710   IS/Level 1  3025/3026   18.9714 3,743.5392  71,020.2857
Hunchback HBK-4J    853     50  3,560,876   IS/Level 1  3025/3026   17.0600 4,174.5322  71,217.5200
Whitworth WTH-1S    753     40  2,859,734   IS/Level 1  3025/3026   18.8250 3,797.7875  71,493.3500
Hunchback HBK-5N    903     50  3,575,876   IS/Level 2  3050        18.0600 3,959.9956  71,517.5200
</font></pre>
]]></content:encoded>
			<wfw:commentRSS>http://www.YeshuaAgapao.com/blog/2007/09/15/classic-battletech-top-charts-for-fanpro-and-fasa-stock-battlemechs-inner-sphere-only/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>BattleTech Movement Rate - To - Max Profitable BattleMech Tonnage Guide for Munchkins</title>
		<link>http://www.YeshuaAgapao.com/blog/2007/09/01/battletech-movement-rate-to-max-profitable-battlemech-tonnage-guide-for-munchkins/</link>
		<comments>http://www.YeshuaAgapao.com/blog/2007/09/01/battletech-movement-rate-to-max-profitable-battlemech-tonnage-guide-for-munchkins/#comments</comments>
		<pubDate>Sat, 01 Sep 2007 22:42:53 +0000</pubDate>
		<dc:creator>YeshuaAgapao</dc:creator>
		
	<category>PnP RPGs &#038; Wargames</category>
		<guid isPermaLink="false">http://www.YeshuaAgapao.com/blog/2007/09/01/battletech-movement-rate-to-max-profitable-battlemech-tonnage-guide-for-munchkins/</guid>
		<description><![CDATA[A bit, after seeing Brian Sugrim in michigan 8/11-8/15 in Kalamazoo, Michigan, I got back into BattleTech a little bit, mostly on influence on his 5-year old son being big into transformers.  The tangent is that BattleMechs are largely humanoid, and in the case of Land-Air &#8216;Mechs, they are transformers as well, but piloted [...]]]></description>
			<content:encoded><![CDATA[<p>A bit, after seeing Brian Sugrim in michigan 8/11-8/15 in Kalamazoo, Michigan, I got back into BattleTech a little bit, mostly on influence on his 5-year old son being big into transformers.  The tangent is that BattleMechs are largely humanoid, and in the case of Land-Air &#8216;Mechs, they are transformers as well, but piloted war-machines rather than self-sentient robots.  Imperial Walkers in Star Wars (AT-AT and AT-ST) could be technically BattleMechs also, but much heavier.  I havn&#8217;t touched my BattleTech stuff much since I was 19 or 20 (1994-1996).  I only have the boardgame, Compendium, and Mechwarrior RPG, but now, I have nearly every BattleTech book now (some hoarded back in 2004 but a lot of new ones recently), in PDF, thanks to <a target="_blog" href="http://www.emule-project.net">eMule</a>!</p>
<p>I made a max-tonnage for a desired movement rate munchkinning guide for you BattleMech designing munchkins like me.  Pick the engine type (Normal, Light , eXtraLight, eXtra-eXtraLight), and a movement rate.  Then get the max total &#8216;Mech tonnage that you can have with that movement rate before you actually start losing tonnage available to armor, weapons, electronic warfare, and other eqipment rather than gaining due to the tonnage increase from the engine (fusion reactor) + gyro + internal structure exceeds the tonnage increase of the overal unit.  You can have a lower weight BattleMech for the given movenet rating, but not higher, else you will have LESS space for weapons and such rather than MORE.</p>
<pre><font face="courier new"> ****************************************

Compact Reactor
Maximum Tech (Level 3) or Total Warfare (Tournament Legal)
Inner Sphere Only; Only use 3 critical slots in CT instead of 6.
+50% mass (3/2)

MP      Tonnage     Engine      Armor/Weap  Notes
3       100         300         55.5-60.5
4       70 or 75    280 or 300  33-36.5     Engine Weight Diff 4.5: Tie with both endo-steel and normal Internal structure.
5       50 or 55    250 or 275  20.0-22.5   Engine Weight Diff 4.5: Tie with both endo-steel and normal Internal structure.
6       40 or 45    240 or 270  12.5-14.5   Engine Weight Diff 4.5: Tie with both endo-steel and normal Internal structure.
7       30 or 35    210 or 245  7.5-9.0     Engine Weight Diff 4.5: Tie with both endo-steel and normal Internal structure.
8       25          200         4.5-5.5     Engine Weight Diff 4.5; No 30 b/c of Gyroscope weight increase (200 vs 240).
9       20          180         2.5-3.5     Engine Weight Diff 4.5; No 30 b/c of Gyroscope weight increase (180 vs 225).
10      15 or 20    150 or 200  0.0-1.0     Engine Weight Diff 4.5: 20 tons if Internal Structure is Endo-Steel, Tie Otherwise.
11      15          165         -0.5-0.0    Endo-Steel Required to fit cockpit and Gyro. No Armor, No Weapons.

****************************************

Standard Reactor

MP      Tonnage     Engine      Armor/Weap  Notes
3       100         300         65.0-70.0
4       75 or 80    300 or 320  42.5-46.5   3.5 Ton engine weight difference, but Gryo weight increase of +1: 80 tons if Internal Structure is Endo-Steel, Tie Otherwise.
5NoJump 60          300         29.0-32.0   Engine Weight Diff 4.5; No 65 b/c of Gyroscope weight increase (300 vs 325)
5Jump   55          275         28.0-30.5   4.5 Ton Engine Diff + 0.5 Ton IS Diff + 2.5 Ton Jump Jet Diff = 2.5 Ton Profit (2.0 Ton with Endo-Steel)
6       50          300         20.0-22.5   Engine Weight Diff 4.5; No 55 b/c of Gyroscope weight increase (300 vs 330)
7       40          280         14.0-16.0
8       30 or 35    240 or 280  9.5-11.0    Engine Weight Diff 4.5: Tie with both endo-steel and normal Internal structure.
9       25 or 30    225 or 270  6.5-8.0     Engine Weight Diff 4.5: 30 tons if Internal Structure is Endo-Steel, Tie Otherwise.
10      20          200         4.5-5.5     No 25 b/c of Gyroscope weight increse (200 vs 250)
11      15          165         2.5-3.0     No 20 b/c of Gyroscope weight increase (165 vs 220)
12      15          180         1.5-2.0     No 20 b/c of Gyroscope weight increase (180 vs 240)
13      15          195         0.5-1.0

****************************************

Light Reactor
New - Total Warfare - Tournament Legal
Inner Sphere only; 2 Critical Slots in Each Side Torse - Less Survivability, but not as bad as XL (makes it the same as clan-XL).
-25% Mass (3/4)

MP      Tonnage     Engine      Armor/Weap  Notes
3       100         300         69.5-74.5
4NoJump 85 or 90    340 or 360  49.0-53.5   Engine Weight Diff 4.5: 90 tons if Internal Structure is Endo-Steel, Tie Otherwise.
4Jump   85          340         49.0-53.0   4.5 Ton Engine Diff + 0.5 Ton IS Diff + 4.0 Ton Jump Jet Diff = 4.0 Ton Profit (3.5 Ton with Endo-Steel)
5       65 or 70    325 or 350  33.5-37.0   Engine Weight Diff 4.5: 70 tons if Internal Structure is Endo-Steel, Tie Otherwise.
6       50          300         24.5-27.0   Engine Weight Diff 4.0; No 55 b/c of Gyroscope weight increase (300 vs 330); But only 0.5 Ton profit over 55 tons (Engine 4 Gyro 1 IS 0.5).
7       40          280         18.0-20.0   Engine Weight Diff 4.5; No 45 b/c of Gyroscope weight increase (280 vs 360).
8       35          280         13.5-15.0   Engine Weight Diff 4.5; No 40 b/c of Gyroscope weight increase (280 vs 320).
9       30          270         10.0-11.5
10      25          250         7.0-8.0
11      20 or 25    220 or 275  4.5-5.5     Engine Weight Diff 4.5: Tie with both endo-steel and normal Internal structure.
12      15 or 20    180 or 240  3.0-4.0     3.5 Ton engine weight difference, but Gryo weight increase of +1: 20 tons (0.5 ton profit) if Internal Structure is Endo-Steel, Tie Otherwise.
13      15          195         2.5-3.0
14      15          210         0.5-1.0
15      15          225         0.0-0.5     Need Endo-Steel to mount very light armor or a small laser.
16      10          160         -0.5-0.0    Endo-Steel Required to fit cockpit and gyro. No Armor, No Weapons.

****************************************

XL (eXtraLight) Reactor
2 (Clan) or 3 (Inner Sphere) Critical Slots in Each Side Torso - Less Survivability, Especially for Inner Sphere!
-50% Mass (1/2)

MP      Tonnage     Engine      Armor/Weap  Notes
3       100         300         74.5-79.5
4NoJump 95          380         58.0-62.5
4Jump   85          340         56.0-60.0   7.0 Ton Engine Diff + 1.0 Ton IS Diff + 4.0 Ton Jump Jet Diff = 2.0 ton profit (1.5 Tons with Endo-Steel)
5       70 or 75    350 or 375  41.0-44.5   Engine Weight Diff 4.5: Tie with both endo-steel and normal Internal structure
6NoJump 60          360         30.5-33.5
6Jump   55          330         30.0-32.5   4.0 Ton Engine Diff + 0.5 ton IS Diff + 3.0 Ton Jump Jet Diff = 2.5 Tons Profit (2.0 Tons with Endo-Steel)
7       50          350         23.0-25.5
8       35 or 40    280 or 320  17.5-19.5   3.5 Ton engine weight difference, but Gryo weight increase of +1: 40 tons (0.5 ton profit) if Internal Structure is Endo-Steel, Tie Otherwise.
9       30 or 35    270 or 315  13.5-15.0   3.5 Ton engine weight difference, but Gryo weight increase of +1: Tie with both endo-steel and normal Internal structure.
10      30          300         11.5-13.0
11      25          275         8.5-9.5     Engine Weight Diff 4.5; No 30 b/c of Gyroscope weight increase (275 vs 330)
12      25          300         7.0-8.0
13      20          260         5.0-6.0
14      20          280         4.0-5.0
15      15 or 20    225 or 300  2.5-3.5     Engine Weight Diff 4.5: 30 tons if Internal Structure is Endo-Steel, Tie Otherwise.
16      15          240         1.5-2.0
17      15          255         1.0-1.5
18      10          180         0.5-1.0
19      10          190         0.0-0.5     Engine Weight Diff 4.5: No 15 b/c of Gyroscope weight increse (190 vs 285). Need Endo-Steel to mount very light armor or a small laser.
20      10          200         -0.5-0.0    Endo-Steel Required to fit cockpit and gyro. No Armor, No Weapons.

****************************************r

XXL Reactor
Level 3 Rules; Maximum Tech Book.  Not in Total Warfare (Not tournament legal)
2 Heat Standing Still; 4 Heat Walk; 6 Heat Run; Double Heat Jumping!
4 (Clan) or 6 (Inner Sphere) Critical Slots in Each Side Torso - Much Less Survivability, Even for Clans!
-67% Mass (1/3)

MP      Tonnage     Engine      Armor/Weap  Notes
4       100         400         65.5-70.5
5       75 or 80    375 or 400  47.5-51.5   Engine Weight Diff 4.5: 80 tons if Internal Structure is Endo-Steel, Tie Otherwise.
6NoJump 60 or 65    360 or 390  36.0-39.0   Engine Weight Diff 4.5: Tie with both endo-steel and normal Internal structure.
6Jump   55          330         34.0-36.5   2.5/7.0 Ton Engine Diff + 0.5/1.0 ton IS Diff + 3.0 Ton Jump Jet Diff = 1.0 Tons Profit (0.5 Tons with Endo-Steel)
7       50 or 55    350 or 385  28.0-30.5   Engine Weight Diff 4.5: Tie with both endo-steel and normal Internal structure.
8       45          360         22.5-24.5
9       40          360         18.0-20.0
10      30 or 35    300 or 350  14.5-16.5   3.5 Ton engine weight difference, but Gryo weight increase of +1: Tie with both endo-steel and normal Internal structure.
11      30          330         11.5-13.0
12      25          300         10.0-11.0   Engine Weight Diff 4.5: No 30 b/c of Gyroscope weight increse (300 vs 360)
13      20          260         7.5-8.5     Engine Weight Diff 4.5: No 25 b/c of Gyroscope weight increse (260 vs 325)
14      20          280         6.5-7.5
15      20          300         5.5-6.5
16      15 or 20    240 or 320  3.5-4.5     3.5 Ton engine weight difference, but Gryo weight increase of +1: 20 tons (0.5 ton profit) if Internal Structure is Endo-Steel, Tie Otherwise.
17      15          255         3.0-3.5     No 20 b/c of Gyroscope weight increse (255 vs 340)
18      15          270         2.5-3.0
19      15          285         2.0-2.5
20      15          300         1.0-1.5
21      10          210         0.0-0.5     Engine Weight Diff 4.5: No 15 b/c of Gyroscope weight increse (210 vs 315). Need Endo-Steel to mount very light armor or a small laser.
22      10          220         -0.5-0.0    Endo-Steel Required to fit cockpit and Gyro. No Armor, No Weapons.

**************************************** </font></pre>
<p>Update 2007-09-15: Added Compact Engines Table; Changed category (new); Other minor changes
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.YeshuaAgapao.com/blog/2007/09/01/battletech-movement-rate-to-max-profitable-battlemech-tonnage-guide-for-munchkins/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>American Mortgage Specialists - Exploits Teenage Kids, Aggressive Sales, Possibly Fraud</title>
		<link>http://www.YeshuaAgapao.com/blog/2007/07/17/american-mortgage-specialists-exploits-teenage-kids-aggressive-sales-possibly-fraud/</link>
		<comments>http://www.YeshuaAgapao.com/blog/2007/07/17/american-mortgage-specialists-exploits-teenage-kids-aggressive-sales-possibly-fraud/#comments</comments>
		<pubDate>Tue, 17 Jul 2007 22:43:35 +0000</pubDate>
		<dc:creator>YeshuaAgapao</dc:creator>
		
	<category>Misc</category>
		<guid isPermaLink="false">http://www.YeshuaAgapao.com/blog/2007/07/17/american-mortgage-specialists-exploits-teenage-kids-aggressive-sales-possibly-fraud/</guid>
		<description><![CDATA[American Mortgage Specialists
480-786-3642 - # From CallerID
480-435-9000 1230 - # From Rep
480-539-9000 1230 - # on Later Voicemail
www.amsaz.com - Web Site
Don&#8217;t do business with this bank!
I filled out a contact info form for a kid going door-2-door to help him make money ($5/form commission only).  I get called.  That&#8217;s expected.  But the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>American Mortgage Specialists</strong><br />
480-786-3642 - # From CallerID<br />
480-435-9000 1230 - # From Rep<br />
480-539-9000 1230 - # on Later Voicemail<br />
<a href="http://www.amsaz.com">www.amsaz.com</a> - Web Site</p>
<p><strong>Don&#8217;t do business with this bank!</strong></p>
<p>I filled out a contact info form for a kid going door-2-door to help him make money ($5/form commission only).  I get called.  That&#8217;s expected.  But the call is to fill out a whole mortagage application over the phone!  Don&#8217;t have a house picked out to put the mortagage on? No problem!  Don&#8217;t know what to answer for a particular question?  No problem, the salesperson makes something up for you!  I stopped and hung up when they got the the social security number over the phone part. Then they call again twice the same day, with all 3 calls have the 480-786-3642 number.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.YeshuaAgapao.com/blog/2007/07/17/american-mortgage-specialists-exploits-teenage-kids-aggressive-sales-possibly-fraud/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>
