• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

根据数据生成INSERTINTO...的SQL(.NetC#,T-SQLStoreProcedure分别实现)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

/*
今天看了 昨天 灵感的 随笔:
http://unruledboy.cnblogs.com/archive/2005/07/18/SmartDBScripts.html

类似的工具也曾写过,今天拿出改改,重新分享给大家!

1. .Net 1.1 C# 实现
这仅仅是一个命令行工具,根据指定的 SQL Select 查询:
select * from Table
来生成 insert into ... 的 SQL

生成的 SQL 的 列之间使用 "\t" Tab 分割,
这样生成的 SQL, Copy & Paste 到 Excel 中,利于编辑,很轻松就可以删掉不想要的列

另外还可以控制是否处理 二进制 的大字段!

实现方式使用 DataSet 和 DataReader 两种方法重载!
区别是:

DataReader.GetDataTypeName(i) 方法可以得到 native 的 SQL Server 的数据类型

DataReader.GetFieldType(i) 方法
DataSet 的 DataTable 的 DataColumn.DataType 属性
都只能得到 .Net 的数据类型!

完整程序下载
https://files.cnblogs.com/Microshaoft/SqlGen.cs.rar

2. T-SQL Store Procedure 实现
有局限性,数据量太大无法生成完整正确的 insert into .... SQL!
*/

1. .Net C#

 


2. T-SQL Store Procedure 实现
有局限性,如果字段太多无法生成完整正确的 Select 'insert into ....' 的 SQL!

create  proc Z_SP_GenInsertSQL (@tablename varchar(256))
as
begin
  
declare @sql varchar(8000)
  
declare @sqlValues varchar(8000)
  
set @sql =' (' + char(9)
  
set @sqlValues = 'values '+ char(9+ '(' + char(9+ '''+'
  
select @sqlValues = @sqlValues + cols + ' + '',' + char(9+ ''' + '  ,@sql = @sql + '[' + name + '],' + CHAR(9)
    
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(@tablenameand autoval is null
        ) T 
  
set @sql ='select ''INSERT INTO ' + CHAR(9+ '['+ @tablename + ']' + CHAR(9+ left(@sql,len(@sql)-2+ char(9+ ''  + CHAR(9+ left(@sqlValues,len(@sqlValues)-5+ char(9+ ')'' from '+@tablename
  
print @sql
  
exec (@sql)


2005-08-02 T-SQL Store Procedure 修订为:
完全不受字段数量或字段值影响 而生成正确完整的 INSERT INTO ... SQL

ALTER     procedure Z_SP_GenInsertSQL
(
    
@tablename varchar(256)
    ,
@WhereClause    varchar(1000= 'where 1 = 1'
)
as
begin


 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#生成二维码发布时间:2022-07-13
下一篇:
C/C++char*arr与chararr[]的区别(反汇编解析)发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap