【代码保留】用于生成RowNumber的程序
2009-10-20 21:20
309 查看
因为Sybase没有rownumber,所以最近要做迁移数据很头痛,我的做法是从表A生成一组SQL语句,将rownumber设置成一个特殊的关键字,然后用下面这个程序来将其替换成有效的值。
准确得说,这个代码的功能就是将“字符串A”匹配成一个“前缀+顺序序列”的替换程序。
GenRowNumber.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GenRowNumber.aspx.cs" Inherits="WebAppClient.GenRowNumber" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>重置Rownumber</title>
</head>
<body>
<form id="form1" runat="server">
<div>
要被替换的字符:<asp:TextBox ID="txtRowNumber" runat="server"></asp:TextBox>(如“row_number”)<br />
生成的字符前缀:<asp:TextBox ID="txtPrefix" runat="server"></asp:TextBox>(如“20091017”,长度必须小于最大长度)<br />
允许的最大长度:<asp:TextBox ID="txtMaxLength" runat="server"></asp:TextBox>(类型:数字)
<br />
每组数据条数:<asp:TextBox ID="txtSQLNumber" runat="server"></asp:TextBox>(如两句SQL一组则填2)<br />
<asp:TextBox ID="txtSQL" runat="server" TextMode="MultiLine" Height="418px" Width="790px"></asp:TextBox>
<br />
<asp:Button ID="btnGenerate" runat="server" Text="Generate" OnClick="btnGenerate_Click" />
<br />
<asp:Label ID="lbOutput" runat="server" Text=""></asp:Label>
<asp:TextBox ID="txtSQLOutput" runat="server" TextMode="MultiLine" Height="418px" Width="790px"></asp:TextBox>
</div>
</form>
</body>
</html>
GenRowNumber.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace WebAppClient
{
public partial class GenRowNumber : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnGenerate_Click(object sender, EventArgs e)
{
if (Check())
{
sql = txtSQL.Text;
while (sql.IndexOf(replaceWord) != -1)
{
string currentSeq = GetNewSeqNo();
for (int i = 0; i < sqlNumber; ++i)
{
if (sql.IndexOf(replaceWord) != -1)
{
int firstPos = sql.IndexOf(replaceWord);
int nextPos = firstPos + replaceWord.Length;
sql = sql.Substring(0, firstPos) + currentSeq + sql.Substring(nextPos, sql.Length - nextPos);
}
}
}
sql = sql.Replace("go \"\n", "go\n");
txtSQLOutput.Text = sql;
}
}
private int seq = 0;
private string GetNewSeqNo()
{
++seq;
return prefix + seq.ToString().PadLeft(seqLength, '0');
}
private string sql = string.Empty;
private string replaceWord = string.Empty;
private int maxLength = 0;
private int seqLength = 0;
private string prefix = string.Empty;
private int sqlNumber = 0;
private bool Check()
{
string txtMaxLength = this.txtMaxLength.Text.Trim();
if (!int.TryParse(txtMaxLength, out maxLength))
{
maxLength = 12;
}
prefix = this.txtPrefix.Text.Trim();
if (prefix.Length > maxLength)
{
Output(string.Format("前缀长度({0})比最大长度({1})还大", prefix.Length.ToString(), maxLength.ToString()));
return false;
}
string txtSqlNumber = this.txtSQLNumber.Text.Trim();
if (!int.TryParse(txtSqlNumber, out sqlNumber))
{
sqlNumber = 1;
}
replaceWord = this.txtRowNumber.Text.Trim();
if (string.IsNullOrEmpty(replaceWord))
{
Output(string.Format("<span style=\"color:red;\">要被替换的字符不能为空</span><br />"));
return false;
}
seqLength = maxLength - prefix.Length;
Output(string.Format("<span style=\"color:red;\">要被替换的字符:{0}</span><br />", replaceWord));
Output(string.Format("<span style=\"color:red;\">生成的字符前缀:{0}</span><br />", prefix));
Output(string.Format("<span style=\"color:red;\">生成的字符前缀长度:{0}</span><br />", prefix.Length.ToString()));
Output(string.Format("<span style=\"color:red;\">允许的最大长度:{0}</span><br />", maxLength.ToString()));
Output(string.Format("<span style=\"color:red;\">每组数据条数:{0}</span><br />", sqlNumber.ToString()));
return true;
}
private void Output(string msg)
{
this.lbOutput.Text += msg + "<br />";
}
}
}
准确得说,这个代码的功能就是将“字符串A”匹配成一个“前缀+顺序序列”的替换程序。
GenRowNumber.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GenRowNumber.aspx.cs" Inherits="WebAppClient.GenRowNumber" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>重置Rownumber</title>
</head>
<body>
<form id="form1" runat="server">
<div>
要被替换的字符:<asp:TextBox ID="txtRowNumber" runat="server"></asp:TextBox>(如“row_number”)<br />
生成的字符前缀:<asp:TextBox ID="txtPrefix" runat="server"></asp:TextBox>(如“20091017”,长度必须小于最大长度)<br />
允许的最大长度:<asp:TextBox ID="txtMaxLength" runat="server"></asp:TextBox>(类型:数字)
<br />
每组数据条数:<asp:TextBox ID="txtSQLNumber" runat="server"></asp:TextBox>(如两句SQL一组则填2)<br />
<asp:TextBox ID="txtSQL" runat="server" TextMode="MultiLine" Height="418px" Width="790px"></asp:TextBox>
<br />
<asp:Button ID="btnGenerate" runat="server" Text="Generate" OnClick="btnGenerate_Click" />
<br />
<asp:Label ID="lbOutput" runat="server" Text=""></asp:Label>
<asp:TextBox ID="txtSQLOutput" runat="server" TextMode="MultiLine" Height="418px" Width="790px"></asp:TextBox>
</div>
</form>
</body>
</html>
GenRowNumber.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace WebAppClient
{
public partial class GenRowNumber : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnGenerate_Click(object sender, EventArgs e)
{
if (Check())
{
sql = txtSQL.Text;
while (sql.IndexOf(replaceWord) != -1)
{
string currentSeq = GetNewSeqNo();
for (int i = 0; i < sqlNumber; ++i)
{
if (sql.IndexOf(replaceWord) != -1)
{
int firstPos = sql.IndexOf(replaceWord);
int nextPos = firstPos + replaceWord.Length;
sql = sql.Substring(0, firstPos) + currentSeq + sql.Substring(nextPos, sql.Length - nextPos);
}
}
}
sql = sql.Replace("go \"\n", "go\n");
txtSQLOutput.Text = sql;
}
}
private int seq = 0;
private string GetNewSeqNo()
{
++seq;
return prefix + seq.ToString().PadLeft(seqLength, '0');
}
private string sql = string.Empty;
private string replaceWord = string.Empty;
private int maxLength = 0;
private int seqLength = 0;
private string prefix = string.Empty;
private int sqlNumber = 0;
private bool Check()
{
string txtMaxLength = this.txtMaxLength.Text.Trim();
if (!int.TryParse(txtMaxLength, out maxLength))
{
maxLength = 12;
}
prefix = this.txtPrefix.Text.Trim();
if (prefix.Length > maxLength)
{
Output(string.Format("前缀长度({0})比最大长度({1})还大", prefix.Length.ToString(), maxLength.ToString()));
return false;
}
string txtSqlNumber = this.txtSQLNumber.Text.Trim();
if (!int.TryParse(txtSqlNumber, out sqlNumber))
{
sqlNumber = 1;
}
replaceWord = this.txtRowNumber.Text.Trim();
if (string.IsNullOrEmpty(replaceWord))
{
Output(string.Format("<span style=\"color:red;\">要被替换的字符不能为空</span><br />"));
return false;
}
seqLength = maxLength - prefix.Length;
Output(string.Format("<span style=\"color:red;\">要被替换的字符:{0}</span><br />", replaceWord));
Output(string.Format("<span style=\"color:red;\">生成的字符前缀:{0}</span><br />", prefix));
Output(string.Format("<span style=\"color:red;\">生成的字符前缀长度:{0}</span><br />", prefix.Length.ToString()));
Output(string.Format("<span style=\"color:red;\">允许的最大长度:{0}</span><br />", maxLength.ToString()));
Output(string.Format("<span style=\"color:red;\">每组数据条数:{0}</span><br />", sqlNumber.ToString()));
return true;
}
private void Output(string msg)
{
this.lbOutput.Text += msg + "<br />";
}
}
}
相关文章推荐
- 【代码保留】用于生成RowNumber的程序
- sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW_NUMBER()两种情况性能分析)
- 从命令行及java程序运行MyBatis Generator 1.3.x自动生成MyBatis 3.x代码
- 用于产生排序编号的 row_number() over ,并支持分段内排序 (还有rank() 、dense_rank() 、lag() 等去加over)
- 使用GNU as生成8086实模式代码(用于启动扇区)
- c# 程序调用代码生成数据库
- 保留空间的容量用于为堆栈设置一个上限,这样就可以抓住代码中的循环递归错误
- 微信小程序前端模板自动生成,不用写代码
- 【VS外接程序】利用T4模板生成模块代码
- 【代码保留】时间器(用于计算时间间隔的类)
- tensorflow用于生成pb的代码
- 如果公司里有上百个表要做触发器,如果手动写代码的话。很累,所以今天写了一个小程序,自动生成mysql的触发代码。
- 巧用 ROW_NUMBER() 生成不重复的唯一排序码,按客户的需要任意排序数据
- 巧用 ROW_NUMBER() 生成不重复的唯一排序码,按客户的需要任意排序数据
- Row_Number 生成样本数据
- 随机数生成程序代码( 伪随机<stdlib.h> )
- Mingw g++ Makfile生成程序代码
- 海明嵌入Hamming Embedding生成Binary Signature之matlab程序代码
- php生成二维码程序代码