`

根据基本表结构及其数据生成 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.
// ==============================================================================

分享到:
评论

相关推荐

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

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

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

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

    SQL 导出数据 insert 语句

    企业管理器只能导出数据库的结构,不能导出基础数据,有了这个工具,不仅可以导出SQL表结构,还可以导出基础数据。 基础数据全部生成Insert语句。

    sql 根据表结构 转为 insert 语句

    一、创建存储过程 二、调用创建好的存储过程 三、生成带有与表名及字段相关的insert 语句 可根据实际情况调整存储过程,如屏蔽不需要字段;update /delete 语句等

    net代码生成器+SQL表结构、数据导出工具

    1、可以生成MVC、Factory代码 2、可以导出SQL表结构 3、可以根据条件导出SQL数据(insert 语句)

    将sql server数据表生成sql文件,可用查询分析器直接运行

    可将sql server 数据表生成sql语句 语句中包括建表部分和数据部分 常用作sql server 数据导入 例如:--表 buyi_product_comment 的结构 CREATE TABLE buyi_product_comment(proId varchar(50) not null,companyid ...

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

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

    2014版net代码生成器+SQL表结构、数据导出工具

    1、可以生成MVC、Factory代码(SQLServer,SQLite) 2、可以导出SQL表结构(SQL2000,SQL2005,SQL2008) 3、可以根据条件导出SQL数据(insert 语句)

    根据ORACLE数据库表结构自动生成SQL语句和VB代码

    根据表结构,可以根据自己的需要,通过双击表名或字段名生成SQL语句,同时也可以生成VB语句,最适合使用在VB操作数据库上(大部分操作数据库都是些SELECT、UPDATE、INSERT、DELETE的命令),可以大大省去时间和精力...

    代码自动生成工具(vb类 java类 sql存储过程...)

    根据自定义模板通过数据库表、视图和存储过程批量生成代码, 模板编辑和代码查看支持语法高亮 (Java, VB, T-SQL) 可以新增语法文件,文件格式类似于 EditPlus 软件附带模板包括: VB 三层结构中实体和...

    Create Insert Tool.xlsm

    基于Excel生成Insert语句工具是一个用于帮助用户将Excel中的数据转换为SQL插入语句的工具。它可以自动将Excel数据转换为Insert语句的格式,使用户能够轻松地将数据导入到数据库中。 该工具的概述如下: 输入数据:...

    21天学习SQL V1.0

    21天学习SQL V1.0.pdf 66 SQL 21 日自学通(V1.0) 翻译人笨猪 EMAIL wyhsillypig@163.com 2 日期/时间函数.........................................................................................................

    MS SQL数据导出Insert语句(SQLDMO)

    1、将表、视图及SQL语句查询结果生成Insert语句 2、将选定数据库对象(表、视图、存储过程等)生成Script 3、支持单表的SQL语句,关联表以第一个表为准 4、丰富了生成选项配置 5、树型结构方便查询操作 6、保存连接及...

    Python 数据库Insert语句脚本生成工具(SQL Server)

    编写这个小工具,是因为平时部署项目的时候,需要导出一些公共的数据(权限、参数设置等),覆盖插入正式环境。 话不多说,直接上代码: import pyodbc import warnings import decimal import winreg import os ...

    将表里的数据批量生成INSERT语句的存储过程 增强版

    目前SQL Server里面是没有相关的工具根据查询条件来生成INSERT语句的,只有借助第三方工具(third party tools) 这种脚本网上也有很多,但是网上的脚本还是欠缺一些规范和功能,例如:我只想导出特定查询条件的...

    达梦数据库用户手册基础学习版.rar

    第 1 章 结构化查询语言 DM_SQL 简介 12 1.1 DM_SQL 语言的特点 12 1.2 保留字与标识符 13 1.3 DM_SQL 语言的功能及语句 13 1.4 DM_SQL 所支持的数据类型 14 1.4.1 常规数据类型 14 1.4.2 位串数据类型 16 ...

    SQL.Server.2008编程入门经典(第3版).part2.rar

    3.2 使用INSERT语句添加数据 3.2.1 多行插入 3.2.2 INSERTINTOSELECT语句 3.3 用UPDATE语句更改数据 3.4 DELETE语句 3.5 本章小结 3.6 练习 第4章 连接 4.1 连接 4.2 内部连接 4.3 外部连接 4.3.1 简单的外部连接 ...

    SQL.Server.2008管理员必备指南.part4.rar(4/4)

     SQL Server专家的呕心力作,数据库管理员的实战宝典,全面、深入地剖析SQL Server2008新特性,结构独特,实例丰富,操作性强。 编辑本段 目录  第Ⅰ部分 SQL Server 2008管理基础  第1章 SQL Server 2008管理...

    SQL.Server.2008编程入门经典(第3版).part1.rar

    3.2 使用INSERT语句添加数据 3.2.1 多行插入 3.2.2 INSERTINTOSELECT语句 3.3 用UPDATE语句更改数据 3.4 DELETE语句 3.5 本章小结 3.6 练习 第4章 连接 4.1 连接 4.2 内部连接 4.3 外部连接 4.3.1 简单的外部连接 ...

    MySQL 5.1参考手册

    8.2. myisampack:生成压缩、只读MyISAM表 8.3. mysql:MySQL命令行工具 8.3.1. 选项 8.3.2. mysql命令 8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. ...

Global site tag (gtag.js) - Google Analytics