`

批量生成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语句了..呵呵.

    excel文件中批量生成insert语句

    本文将详细讲解如何在Excel文件中批量生成INSERT语句,以便快速地将数据导入到数据库中。 首先,我们需要了解INSERT语句的基本结构。INSERT语句用于向数据库表中插入新的记录,其基本语法如下: ```sql INSERT ...

    生成insert语句的存储过程

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

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

    在数据库管理中,有时需要将一个表中的数据迁移或备份到另一个数据库,这时批量生成INSERT语句就显得非常有用。SQL Server虽然没有内置功能直接根据查询条件生成这些语句,但可以通过编写存储过程来实现。本文介绍的...

    批量生产insert语句

    在数据库管理中,批量生成`INSERT`语句是一项常见的任务,尤其在数据迁移、测试数据填充或数据分析等场景中。批量生产`INSERT`语句能够有效地提高工作效率,避免手动编写大量单行插入语句的繁琐过程。下面我们将深入...

    SQL 导出数据 insert 语句

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

    delphi生成insert 语句

    如果数据量很大,直接执行大量INSERT语句可能会有性能问题,这时可以考虑使用批量插入或存储过程来提高效率。 综上所述,"delphi生成insert 语句"是一个实用的开发技巧,通过结合Delphi的强大编程能力和数据库访问...

    SQL Server存储过程生成insert语句实例

    首先,存储过程`spGenInsertSQL`接受一个参数`@tablename`,该参数是你要生成INSERT语句的表名。通过调用这个存储过程并传递表名,你可以自动生成插入语句,而无需手动编写。 在存储过程中,声明了两个变量`@sql`和...

    SQLServer导出为Insert语句

    5. **自动生成Insert语句**:为了批量生成Insert语句,我们需要遍历用户表中的所有记录,并为每一行生成对应的Insert语句。这可以通过编写SQL查询,或者使用编程语言(如C++结合MFC)实现。程序可能首先获取表结构,...

    Oracle导出INSERT语句V1.1

    4. **批量INSERT**:为了提高执行效率,工具可能会将多行数据合并为一个INSERT语句,每个语句包含多个VALUES子句。 5. **格式化输出**:生成的INSERT语句可能会自动进行格式化,便于阅读和编辑。 6. **输出格式**:...

    SQLServer表数据转化为sql语句(表数据搬运,一键快捷导出为insert语句,方便导入到其它库)

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

    存储过程批量生成代金卷

    本示例展示了如何使用T-SQL在SQL Server中创建一个存储过程来批量生成具有唯一性的代金券号码。通过合理设计和运用SQL Server的强大功能,不仅提高了数据处理效率,也确保了数据的一致性和准确性。对于类似的业务...

    在SQL Server中生成INSERT语句

    为了生成INSERT语句,我们可以创建一个存储过程,接受必要的参数,然后动态构造并返回INSERT语句。 3. **动态SQL**: 在存储过程中,我们可能需要使用动态SQL(即在运行时构建SQL语句的字符串)来生成INSERT语句。...

    SQL SERVER 数据自动生成SQL语句

    4. **生成脚本**:所有INSERT语句会被整合成一个大的SQL脚本,可以一次性执行,将所有数据导入新数据库。 5. **优化与执行**:为了提高效率,可能还需要对生成的脚本进行优化,例如批量插入,减少事务次数,以提高...

    java类实现导出各种数据库insert语句.pdf

    9. 集合类的使用:`ArrayList&lt;String&gt;` 用于存储INSERT语句,`insertList` 在遍历结果集并构造INSERT语句后,将这些语句存储起来,然后写入到文件中。 10. 类设计:`Test` 类包含了数据库连接、SQL执行、文件操作和...

    oracle快速批量生成表和触发器和序列.zip

    批量生成表可能涉及到编写SQL脚本,利用`CREATE TABLE`语句,一次定义多个表的结构。例如,可以创建一个包含多行的脚本,每行对应一个`CREATE TABLE`命令。 2. **触发器(Trigger)**:触发器是一种数据库对象,它...

    表格生成SQL插入语句

    此外,如果表格中包含敏感信息,还需要注意数据安全,确保在传输和存储过程中进行适当的加密和权限控制。 在实际应用中,"表格生成SQL插入语句"工具可以大大提高数据处理的效率,减轻手动操作的负担,特别适合那些...

Global site tag (gtag.js) - Google Analytics