`

批量生成insert 语句的存储过程

阅读更多
今天做了一个将表中数据导出,生成xml文件的需求。在网上找了几个存储过程:
生成表中所有数据的insert 语句的存储过程:
--exec spGenInsertSQL 'tabelname'
create proc [dbo].[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
print @sqlValues
set @sql ='select ''INSERT INTO '+ @tablename + left(@sql,len(@sql)-1)+') ' + left(@sqlValues,len(@sqlValues)-4) + ')'' as sql from '+@tablename

print @sql
exec (@sql)
end



批量生成查询条件下的insert语句:
/*
Authore : neeraj prasad sharma (please dont remove this :))
Example (1) Exec [dbo].[INS]  'Dbo.test where 1=1'
        (2) Exec [dbo].[INS]  'Dbo.test where name =''neeraj''' * for string
	 (3) Exec [dbo].[INS]  'Dbo.test where createdate>''2013-09-20'''

here Dbo is schema and test is tablename and 1=1 is condition

*/


ALTER procedure  [dbo].[INS]                              
(                                                          
   @Query  Varchar(MAX)                                                          
)                              

AS                              

       Set nocount ON                  

DEclare @WithStrINdex as INT                            
DEclare @WhereStrINdex as INT                            
DEclare @INDExtouse as INT                            

Declare @SchemaAndTAble VArchar(270)                            
Declare @Schema_name  varchar(30)                            
Declare @Table_name  varchar(240)                            
declare @Condition  Varchar(MAX)                             

SET @WithStrINdex=0                            

SELECT @WithStrINdex=CHARINDEX('With',@Query )                            
, @WhereStrINdex=CHARINDEX('WHERE', @Query)                            

IF(@WithStrINdex!=0)                            
Select @INDExtouse=@WithStrINdex                            
ELSE                            
Select @INDExtouse=@WhereStrINdex                            

Select @SchemaAndTAble=Left (@Query,@INDExtouse-1)                                                     
select @SchemaAndTAble=Ltrim (Rtrim( @SchemaAndTAble))                            

Select @Schema_name= Left (@SchemaAndTAble, CharIndex('.',@SchemaAndTAble )-1)                            
,      @Table_name = SUBSTRING(  @SchemaAndTAble , CharIndex('.',@SchemaAndTAble )+1,LEN(@SchemaAndTAble) )                            

,      @CONDITION=SUBSTRING(@Query,@WhereStrINdex+6,LEN(@Query))--27+6                            


Declare   @COLUMNS  table (Row_number SmallINT , Column_Name VArchar(Max) )                              
Declare @CONDITIONS as varchar(MAX)                              
Declare @Total_Rows as SmallINT                              
Declare @Counter as SmallINT              

declare @ComaCol as varchar(max)            
select @ComaCol=''                   

Set @Counter=1                              
set @CONDITIONS=''                              

INsert INTO @COLUMNS                              
Select  Row_number()Over (Order by ORDINAL_POSITION ) [Count] ,Column_Name FRom INformation_schema.columns Where Table_schema=@Schema_name                              
And table_name=@Table_name         
and Column_Name not in ('SyncDestination','PendingSyncDestination' ,'SkuID','SaleCreditedto')                  

select @Total_Rows= Count(1) FRom  @COLUMNS                              

             Select @Table_name= '['+@Table_name+']'                      

             Select @Schema_name='['+@Schema_name+']'                      

While (@Counter<=@Total_Rows )                              
begin                               
--PRINT @Counter                              

    select @ComaCol= @ComaCol+'['+Column_Name+'],'            
    FROM @COLUMNS                              
Where [Row_number]=@Counter                          

select @CONDITIONS=@CONDITIONS+ ' +Case When ['+Column_Name+'] is null then ''Null'' Else ''''''''+                              

 Replace( Convert(varchar(Max),['+Column_Name+']  ) ,'''''''',''''  )                              

  +'''''''' end+'+''','''                              

FROM @COLUMNS                              
Where [Row_number]=@Counter                              

SET @Counter=@Counter+1                              

End                              

select @CONDITIONS=Right(@CONDITIONS,LEN(@CONDITIONS)-2)                              

select @CONDITIONS=LEFT(@CONDITIONS,LEN(@CONDITIONS)-4)              
select @ComaCol= substring (@ComaCol,0,  len(@ComaCol) )                            

select @CONDITIONS= '''INSERT INTO '+@Schema_name+'.'+@Table_name+ '('+@ComaCol+')' +' Values( '+'''' + '+'+@CONDITIONS                              

select @CONDITIONS=@CONDITIONS+'+'+ ''')'''                              

Select @CONDITIONS= 'Select  '+@CONDITIONS +'FRom  ' +@Schema_name+'.'+@Table_name+' With(NOLOCK) ' + ' Where '+@Condition                              
print(@CONDITIONS)                              
Exec(@CONDITIONS)  
分享到:
评论

相关推荐

    SQL数据表批量生成Insert语句存储过程

    SQL数据表批量生成Insert语句存储过程,使用方法是 先下载资源后解压缩后,在数据库里执行创建存储过程, 然后执行 存储'表名' 看看查询结果会让你欣喜吧,全都是批量的insert语句了..呵呵.

    生成insert语句的存储过程

    sqlserver的存储过程批量生成insert插入语句 在需要批量导入数据或者保留数据的情况下使用

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

    主要介绍了将表里的数据批量生成INSERT语句的存储过程 增强版的相关资料,需要的朋友可以参考下

    SQLServer表数据转化为sql语句(存储过程,一键批量导出、导入)

    (包含insert语句。结果可一键执行,利于数据导出、导入) 参数: @tableName nvarchar(100) --表名 ,@sqlWhere nvarchar(500) --where条件(传空时,导出全部数据) 不足: 不支持text,binary,image,text等类型; ...

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

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

    mybatis-base增删改查分页批量操作简单动态sql调用存储过程.zip

    在XML文件中,标签通常被嵌套在其他标签内,如、&lt;insert&gt;和等标签内,用于控制生成的SQL语句的结构和内容。 标签通常包含一个test属性,该属性被用于指定条件表达式。如果表达式的结果为true,则标签内的内容会被...

    表格生成SQL插入语句.zip

    将带有列名的Excel表格导出为insert into特定表的语句

    .NET代码生成器 C# 版 (可自定义模板函数和模板类,及视图实体)

     用户批量生成代码文件(解决方案文件,项目文件,各个层的代码文件)  通过sql语句,生成视图字段实体。  可定义函数模板和类模板,使代码生成更加通用化。 说明:这需要事先安装.net framework 3.5 。这...

    .NET代码生成器 C# 版(可自定义模板函,模板类,及视图实体)

     用户批量生成代码文件(解决方案文件,项目文件,各个层的代码文件)  通过sql语句,生成视图字段实体。  可定义函数模板和类模板,使代码生成更加通用化。 说明:这需要事先安装.net framework 3.5 。...

    Visual C++程序开发范例宝典 - 第8章

    实例266 利用INSERT语句批量插入数据 实例267 利用SELECT INTO生成临时表 8.3 更新数据 实例268 批量修改数据 实例269 将指定字段数据为空的记录添上数据 8.4 删除数据 实例270 删除单条数据 实例271 删除数据库中无...

    Toad 使用快速入门

    可以自定义存储过程得模板,在新建存储过程的时候,自动生成程序的框架可以方便的调用Schema Browser,把鼠标定位于某个对象上,F4,Schema Browser打开该对象的详细描述,帮助顺利快速开发程序。支持代码自动更正,...

    SQL21日自学通

    存储过程包和触发机制403 总结406 问与答407 校练场407 练习407 第19 天TRANSACT-SQL 简介408 目标408 TRANSACT-SQL 概貌408 对ANSI SQL 的扩展408 谁需要使用TRANSACT-SQL409 TRANSACT-SQL 的基本组件409 数据...

    sqlserver2000基础(高手也有用)

    7.2.4 使用SQL Server的系统存储过程处理分页 216 7.3 特殊要求的分页处理 217 7.3.1 随机显示的分页处理 217 7.3.2 分类数据的分页处理 221 第 8 章 树形数据处理 223 8.1 单编号处理法 223 8.1.1 ...

    C#.net_经典编程例子400个

    267 6.5 复制文件 268 实例186 移动正在使用的文件 268 实例187 批量复制文件 269 6.6 指定类型的文件操作 270 实例188 文本文件的操作 270 实例189 简单的文件加密解密 271 6.7 ...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例208 利用INSERT语句批量插入数据 实例209 利用SELECT INTO生成临时表 8.3 更新数据 实例210 批量修改数据 实例211 将指定字段数据为空的记录添上数据 8.4 删除数据 实例212 删除单条数据 实例213 删除...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例208 利用INSERT语句批量插入数据 实例209 利用SELECT INTO生成临时表 8.3 更新数据 实例210 批量修改数据 实例211 将指定字段数据为空的记录添上数据 8.4 删除数据 实例212 删除单条数据 实例213 删除...

Global site tag (gtag.js) - Google Analytics