`

根据基本表结构及其数据生成 INSERT ... 的 SQL

 
阅读更多

create proc spGenInsertSQL
@TableName as varchar(100)
as
--declare @TableName varchar(100)
--set @TableName = 'orders'
--set @TableName = 'eeducation'
DECLARE xCursor CURSOR FOR
SELECT name,xusertype
FROM syscolumns
WHERE (id = OBJECT_ID(@TableName))
declare @F1 varchar(100)
declare @F2 integer
declare @SQL varchar(8000)
set @sql ='SELECT ''INSERT INTO ' + @TableName + ' VALUES('''
OPEN xCursor
FETCH xCursor into @F1,@F2
WHILE @@FETCH_STATUS = 0
BEGIN
set @sql =@sql +
+ case when @F2 IN (35,58,99,167,175,231,239,61) then ' + case when ' + @F1 + ' IS NULL then '''' else '''''''' end + ' else '+' end
+ 'replace(ISNULL(cast(' + @F1 + ' as varchar),''NULL''),'''''''','''''''''''')'
+ case when @F2 IN (35,58,99,167,175,231,239,61) then ' + case when ' + @F1 + ' IS NULL then '''' else '''''''' end + ' else '+' end
+ char(13) + ''','''
FETCH NEXT FROM xCursor into @F1,@F2
END
CLOSE xCursor
DEALLOCATE xCursor
set @sql = left(@sql,len(@sql) - 5) + ' + '')'' FROM ' + @TableName
--print @sql
exec (@sql)


--第二版:2003.03.08
go


alter proc SPGenInsertSQL (@tablename varchar(256))
as
begin
declare @sql varchar(8000)
declare @sqlValues varchar(8000)
set @sql =' ('
set @sqlValues = 'values (''+'
select @sqlValues = @sqlValues + cols + ' + '','' + ' ,@sql = @sql + '[' + name + '],'
from
(select case
when xtype in (48,52,56,59,60,62,104,106,108,122,127)
then 'case when '+ name +' is null then ''NULL'' else ' + 'cast('+ name + ' as varchar)'+' end'
when xtype in (58,61)
then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast('+ name +' as varchar)'+ '+'''''''''+' end'
when xtype in (167)
then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+'''''''''+' end'
when xtype in (231)
then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+'''''''''+' end'
when xtype in (175)
then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast(replace('+ name+','''''''','''''''''''') as Char(' + cast(length as varchar) + '))+'''''''''+' end'
when xtype in (239)
then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'cast(replace('+ name+','''''''','''''''''''') as Char(' + cast(length as varchar) + '))+'''''''''+' end'
else '''NULL'''
end as Cols,name
from syscolumns
where id = object_id(@tablename)
) T
set @sql ='select ''INSERT INTO ['+ @tablename + ']' + left(@sql,len(@sql)-1)+') ' + left(@sqlValues,len(@sqlValues)-4) + ')'' from '+@tablename
--print @sql
exec (@sql)
end

go
--第三版: 2003.3.9

ALTER proc SPGenInsertSQL (@tablename varchar(256))
as
begin
declare @sql varchar(8000)
declare @sqlValues varchar(8000)
set @sql =' ('
set @sqlValues = 'values (''+'
select @sqlValues = @sqlValues + cols + ' + '','' + ' ,@sql = @sql + '[' + name + '],'
from
(select case
when xtype in (48,52,56,59,60,62,104,106,108,122,127)
then 'case when '+ name +' is null then ''NULL'' else ' + 'cast('+ name + ' as varchar)'+' end'
when xtype in (58,61)
then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast('+ name +' as varchar)'+ '+'''''''''+' end'
when xtype in (167,175)
then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+''''''''' + ' end'
when xtype in (231,239)
then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+''''''''' + ' end'
else '''NULL'''
end as Cols,name
from syscolumns
where id = object_id(@tablename) and autoval is null
) T
set @sql ='select ''INSERT INTO ['+ @tablename + ']' + left(@sql,len(@sql)-1)+') ' + left(@sqlValues,len(@sqlValues)-4) + ')'' from '+@tablename
print @sql
exec (@sql)
/*
select *
from syscolumns
where id = object_id('test') and autoval is null
*/
end

--

C# DataSet SqlDataReader:
using System;
using System.Data;
using System.Xml;
using System.Data.SqlClient;
using System.Collections;
//using Microsoft.ApplicationBlocks.Data

public class Class1
{
[STAThread] //应 ClipBoard 需要
static void Main(string[] args)
{
System.Console.WriteLine("pls enter Server:");
string S = System.Console.ReadLine();

System.Console.WriteLine("pls enter DataBase:");
string D = System.Console.ReadLine();

System.Console.WriteLine("pls enter User:");
string U = System.Console.ReadLine();

System.Console.WriteLine("pls enter Password:");
string P = System.Console.ReadLine();

System.Console.WriteLine("pls enter SQL:");
string sql = System.Console.ReadLine();
//

// DataReader
//string sql = "select top 2 * from products";
//sql = "select * from orders /n select * from [order details]";
string ConnectionString = @"Server=" + S + ";Database=" + D + ";User ID=" + U + ";Password=" + P;

//下面引用 Microsoft SqlHelper 得到 SqlDataReader
SqlDataReader x = SqlHelper.ExecuteReader(ConnectionString,System.Data.CommandType.Text, sql);
System.Console.WriteLine("/nuse SqlDataReader :");
System.Windows.Forms.Clipboard.SetDataObject(GenerateInsertInToSQLData(x,false),true);

System.Console.WriteLine("/npls paste (ctrl + v)!");
System.Console.ReadLine();

// DataSet
System.Data.SqlClient.SqlConnection sc = new System.Data.SqlClient.SqlConnection(ConnectionString);
//下面引用 Microsoft SqlHelper 得到 DataSet
DataSet ds = SqlHelper.ExecuteDataset(sc, System.Data.CommandType.Text, sql);
//SqlParameter [] spa = SqlHelperParameterCache.GetSpParameterSet(sc,"zsp_calendar");
//spa[0].Value = System.DateTime.Parse("1995-09-09");
//DataSet ds = SqlHelper.ExecuteDataset(sc,CommandType.StoredProcedure,"zsp_calendar",spa);
System.Console.WriteLine("/nuse DataSet :");
System.Windows.Forms.Clipboard.SetDataObject(GenerateInsertInToSQLData(ds,true),true);
System.Console.WriteLine("/npls paste (ctrl + v)!");
System.Console.ReadLine();

}
public static string GenerateInsertInToSQLData(DataSet ds,bool IgnoreBigColumn)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
int j = 0;
string bs = ""; //用于记录上次的位数
System.Console.Write("/n正在进行第 ");
foreach (DataTable dt in ds.Tables)
{
bool b = true;
if (sb.Length > 0)
sb.Append("/n");
string s = "";
foreach (DataRow dr in dt.Rows)
{
bool B;
string r = "";
if (sb.Length > 0)
sb.Append("/n");
foreach (DataColumn dc in dt.Columns)
{
B = true;
if (r != "" && !r.EndsWith(","))
r += ",";
if (s != "" && !s.EndsWith(",") && b)
s += ",";
switch (dc.DataType.FullName)
{
case "System.Boolean" :
r += dr[dc] == System.DBNull.Value ? "null" : ((bool) dr[dc] ) ? "1" : "0";
break;
case "System.Decimal" :
goto case "System.Int32";
case "System.Double" :
goto case "System.Int32";
case "System.Int16" :
goto case "System.Int32";
case "System.Int64" :
goto case "System.Int32";
case "System.Single" :
goto case "System.Int32";
case "System.UInt16" :
goto case "System.Int32";
case "System.UInt32" :
goto case "System.Int32";
case "System.UInt64" :
goto case "System.Int32";
case "System.Int32" :
r += dr[dc] == System.DBNull.Value ? "null" : dr[dc].ToString();
break;
case "System.Char" :
goto case "System.String";
case "System.DateTime" :
goto case "System.String";
case "System.String" :
r += dr[dc] == System.DBNull.Value ? "null" : "'" + dr[dc].ToString().Replace("'","''") + "'";
break;
default :
if (IgnoreBigColumn)
{
B = false;
}
else
{
r += "null";
}
break;
}
if (b && B)
{
s += "[" + dc.ColumnName + "]";
}
}
sb.Append("insert into [" + dt.TableName + "] (" + s + ") values (" + r + ")");
b = false;
System.Console.Write(bs + "/b/b/b" + ++j + " 次," + System.DateTime.Now);
bs = new string('/b',Digits(j) + System.DateTime.Now.ToString().Length + 1); //19 为日期时间字符串长度, 1 是 ","

}
}
return sb.ToString();
}
public static string GenerateInsertInToSQLData(SqlDataReader sdr,bool IgnoreBigColumn)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
int j = 0;
int k = 0;
string bs = ""; //用于记录上次的位数
System.Console.Write("/n正在进行第 ");
do
{
bool b = true;
if (sb.Length > 0)
sb.Append("/n");
string s = "";
while (sdr.Read())
{
bool B;
string r = "";
if (sb.Length > 0)
sb.Append("/n");
for (int i = 0; i < sdr.FieldCount; i++)
{
B = true;
if (r != "" && !r.EndsWith(","))
r += ","; //数据行
if (s != "" && !s.EndsWith(",") && b)
s += ","; //字段列表
switch (sdr.GetDataTypeName(i))
{
case "bit" :
r += sdr.IsDBNull(i) ? "null" : ((bool) sdr[i]) ? "1" : "0";
break;
case "bigint" :
goto case "int";
case "smallint" :
goto case "int";
case "tinyint" :
goto case "int";
case "decimal" :
goto case "int";
case "numeric" :
goto case "int";
case "money" :
goto case "int";
case "smallmoney" :
goto case "int";
case "float" :
goto case "int";
case "real" :
goto case "int";
case "int" :
r += sdr.IsDBNull(i) ? "null" : sdr[i].ToString();
break;
case "datetime" :
goto case "varchar";
case "smalldatetime" :
goto case "varchar";
case "char" :
goto case "varchar";
case "text" :
goto case "varchar";
case "varchar" :
r += sdr.IsDBNull(i) ? "null" : "'" + sdr[i].ToString().Replace("'","''") + "'";
break;
case "nchar" :
goto case "nvarchar";
case "ntext" :
goto case "nvarchar";
case "nvarchar" :
//sb.Append(sdr.IsDBNull(i) ? "null" : "N'" + sdr[i].ToString().Replace("'","''") + "'");;
r += sdr.IsDBNull(i) ? "null" : "N'" + sdr[i].ToString().Replace("'","''") + "'";
break;
default :
if (IgnoreBigColumn)
{
B = false;
}
else
{
r += "null";
}
break;
}
if (b && B)
{
s += "[" + sdr.GetName(i) + "]";
}
}
sb.Append("insert into [Table" + k + "] (" + s + ") values (" + r + ")");
b = false;
System.Console.Write(bs + "/b/b/b" + ++j + " 次," + System.DateTime.Now);
bs = new string('/b',Digits(j) + System.DateTime.Now.ToString().Length + 1); //19 为日期时间字符串长度, 1 是 ","
}
k ++;
} while(sdr.NextResult());
return sb.ToString();
}

static int Digits(int n) //数字所占位数
{
n = System.Math.Abs(n) ;
n = n/10;
int i = 1;
while (n > 0)
{
n = n / 10;
i++;
}
return i;
}
}

// 下面是 Microsoft SqlHelper :

// ===============================================================================
// Microsoft Data Access Application Block for .NET
// http://msdn.microsoft.com/library/en-us/dnbda/html/daab-rm.asp
//
// SQLHelper.cs
//
// This file contains the implementations of the SqlHelper and SqlHelperParameterCache
// classes.
//
// For more information see the Data Access Application Block Implementation Overview.
// ===============================================================================
// Release history
// VERSIONDESCRIPTION
// 2.0Added support for FillDataset, UpdateDataset and "Param" helper methods
//
// ===============================================================================
// Copyright (C) 2000-2001 Microsoft Corporation
// All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR
// FITNESS FOR A PARTICULAR PURPOSE.
// ==============================================================================

分享到:
评论

相关推荐

    sqlserver表数据生成insertsql脚本(导出成insertsql脚本).pdf

    SQL Server表数据生成INSERT SQL脚本 SQL Server是一种强大的关系数据库管理系统,提供了多种方式来生成INSERT SQL脚本,以便将数据导出到其他数据库或系统中。在本文中,我们将介绍如何使用SQL Server 2008中文版...

    SQL SERVER 将select数据生成insert语句

    在SQL Server中,有时我们需要将一个数据库中的表结构和数据迁移到另一个数据库,或者备份部分数据以便于恢复或分析。在这种情况下,`SELECT INTO` 和 `INSERT INTO...SELECT` 语句是常用的工具,可以将数据从一个源...

    根据表结构和数据,自动生成SQL

    针对这种情况,"根据表结构和数据,自动生成SQL"的技术应运而生,它能够极大提升效率并降低错误率。 这个技术的核心是通过分析数据库中的表结构和数据,自动生成对应的SQL脚本。这样的脚本通常包括创建表的DDL...

    SQL Server表数据导出成Insert语句的工具

    4. **工具的使用**:一般情况下,用户需要选择连接到的SQL Server实例,指定要导出的数据库和表,然后工具会自动获取表结构和数据。用户可以选择是否包含特定的列,是否处理特殊字符(如转义引号),以及是否生成...

    c# 导出MSSQL表数据 Insert语句

    这就是在C#中导出MSSQL表数据并生成Insert语句的基本步骤。这个过程可以进一步优化,例如添加错误处理,或者允许用户自定义查询条件。在实际应用中,可能需要将这些步骤封装成一个方法或类,以便在不同场景下重复...

    根据SQLServer数据表生成C#实体类。生成数据库模型.zip

    本压缩包"根据SQLServer数据表生成C#实体类"提供了相关的工具和源码,旨在帮助开发者快速创建与数据库表结构相对应的C#类。SQLHelper是一个常见的辅助类,用于简化SQL操作,避免了大量的硬编码SQL语句,使得数据库...

    将sqlserver表中指定数据转化为insert语句

    首先,你需要获取表结构,然后构造INSERT语句,避开自增列。例如: ```sql DECLARE @sql NVARCHAR(MAX) = '' SELECT @sql += 'INSERT INTO NewTable (' + STUFF((SELECT ', ' + QUOTENAME(c.name) FROM sys....

    生成数据库表insert语句脚本

    - 接着,遍历表中的每一行数据,根据数据类型转换为合适的SQL值格式。 - 最后,构造INSERT语句并将其添加到脚本中。 5. **注意事项**: - 处理NULL值:在生成脚本时,需要确保正确处理NULL值,可能需要特殊标记...

    数据库数据生成insert脚本(MSSQL版)

    标题“数据库数据生成insert脚本(MSSQL版)”涉及的是在Microsoft SQL Server环境下,如何自动生成用于插入数据的SQL脚本。这样的脚本在数据迁移、备份、同步或测试场景中非常实用,可以极大地提高工作效率。描述中...

    MSsql数据表生成sql脚本

    2. **全面性**:除了基本的表结构,它可能还能处理存储过程、触发器、视图、用户定义函数等复杂数据库对象。 3. **灵活性**:允许用户自定义脚本选项,例如选择特定的表、指定脚本格式(如INSERT语句的数量,是否...

    生成sql insert数据脚本更新

    在生成INSERT语句时,需要确保每一条记录的值与目标表的列数匹配,否则会导致语法错误或数据丢失。 在数据库管理中,生成SQL脚本是一项常见的任务,可以使用多种工具完成,如MySQL的mysqldump,Oracle的expdp,或者...

    sql server 数据结构生成器

    【SQL Server 数据结构生成器】是一款专为SQL Server数据库设计的实用工具,它能够帮助数据库管理员和开发人员快速、高效地生成数据库的结构文档。这款软件可以详细地展示数据库的表、视图、存储过程、函数等对象的...

    根据Excel文件生成数据库insert建表sql

    2、方便可视化sql表字段展示,统一维护,可放在钉钉、teams、云盘中共同维护,方便版本管理,生成最新的表结构; 3、对项目开始设计表时特别友好,方便统一管理表字段,也方便和业务确认字段; 4、具体操作步骤可见...

    将数据生成为SQL的insert脚本

    使用这个压缩包中的程序,用户可以方便地从一个数据库表中导出数据,生成一系列的SQL INSERT语句,这些语句可以用于在其他环境中重新创建相同的数据,或者作为备份。用户可能需要提供数据库连接信息(如服务器地址、...

    根据表名及字段,自动生成insert,update,select语句

    首先在数据库中创建存储过程和方法,然后调用创建好的存储过程,生成带有与表名及字段相关的insert,update,delete语句,变量与表字段名相同,例如: "insert into temp (col1,col2,col3) values ('"+col1+"','"+col2...

    数据字典与sql语句生成工具.zip

    2. **sql.txt**:这个文本文件可能包含了SQL(结构化查询语言)语句,它是用于管理和操作数据库的标准语言。SQL语句可以用来创建、查询、更新或删除数据库中的记录。在这个文件中,用户可能找到了预定义的查询或者...

    根据表的内容生成insert语句的工具sqldump(SQLServer)

    《SQLServer数据库表内容生成INSERT语句工具:sqldump详解》 在SQLServer数据库管理中,有时我们需要将已有数据的结构和内容快速地迁移到其他环境或备份,这时,手动编写INSERT语句无疑是一项繁琐的工作。为了提高...

    PyCharm生成数据库表结构语句脚本以及数据库数据insert语句的方法.docx

    PyCharm 生成数据库表结构语句脚本和数据库数据 insert 语句的方法 PyCharm 是一款功能强大且流行的集成开发环境(IDE),它提供了许多实用的功能来帮助开发者更方便地开发、调试和维护项目。其中,PyCharm 的 ...

    SQL 导出数据 insert 语句

    在SQL Server中,虽然没有直接的内置功能来批量生成INSERT语句,但可以通过SQL查询或其他工具(如SQL Server Management Studio - SSMS)配合T-SQL脚本来实现这一目标。 例如,你可以编写一个存储过程或者使用SSMS...

    自动生成insert语句的工具

    这些工具一般会扫描数据库表结构,获取每一行数据,并将其转换为符合SQL语法的INSERT语句。用户可能需要提供数据库连接信息,包括数据库服务器地址、数据库名、用户名和密码,以及选择要导出的特定表。 描述中的...

Global site tag (gtag.js) - Google Analytics