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

 更新时间:2013年11月19日 09:15:46   作者:  
这篇文章主要介绍了SQL Server使用存储过程生成insert语句再执行大量插入数据的方法

你肯定有过这样的烦恼,同样的表,不同的数据库,加入你不能执行select  insert
那么你肯定需要一条这样的存储过程,之需要传入表明,就会给你生成数据的插入语句。
当然数据表数量太大,你将最好用别的方式

复制代码 代码如下:

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 '''''''''+convert(char(23),'+name+',121)+''''''''' --datetime   
                     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

SQL语句

最后的结果:
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('0002CA83-AF2F-4D8F-A345-33CA1CC7CF3C','任务调度系统',18,'2013-01-02 21:42:30.013','',NULL,'2013-01-02 21:42:30.013')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('0004A6F3-EC28-4D1F-BA40-0FC4B2218C92','任务调度系统',18,'2013-07-09 19:36:00.060','',NULL,'2013-07-09 19:36:00.060')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('00094D35-7B51-4EA3-871E-CE17E293B157','任务调度系统',18,'2013-05-16 15:21:20.070','',NULL,'2013-05-16 15:21:20.070')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('000BFBB0-B37D-4D6E-9FA2-3069D4F18F84','任务调度系统',18,'2013-04-11 11:41:50.030','',NULL,'2013-04-11 11:41:50.030')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('000C2CBC-E358-4469-BC2C-04F4DDCD72CD','任务调度系统',18,'2013-05-06 16:07:00.037','',NULL,'2013-05-06 16:07:00.037')
INSERT INTO [SysSample] ([Id],[Name],[Age],[Bir],[Photo],[Note],[CreateTime]) values ('000CB795-40EC-4783-B7A4-8D298DF63B70','任务调度系统',18,'2013-01-23 20:52:30.030','',NULL,'2013-01-23 20:52:30.030')

相关文章

  • sql 游标使用笔记

    sql 游标使用笔记

    sql 游标使用笔记,需要的朋友可以参考下。
    2011-04-04
  • SQL 特殊语句(学习笔记)

    SQL 特殊语句(学习笔记)

    SQL 特殊语句(学习笔记),以XML 返回,处理大批量数据的添加,转换类型等实现
    2012-05-05
  • SQL Server 分页查询存储过程代码

    SQL Server 分页查询存储过程代码

    SQL Server分页查询存储过程,对于想使用存储过程实现分页的朋友可以参考下。
    2010-05-05
  • SQL Server数据库的高性能优化经验总结

    SQL Server数据库的高性能优化经验总结

    小编以前在做ASP及.NET的时候经常用到SQL SERVER,现在用PHP虽然大多数时候用MYSQL,但不泛有些客户要在原来SQL的平台上升级或兼容开发,值得庆幸的是PHP无所不能,基本上所有的数据库它都能连接并支持
    2011-07-07
  • mssql CASE,GROUP BY用法

    mssql CASE,GROUP BY用法

    创建数据库并利用case和group by实现数据库的插入数据操作
    2009-02-02
  • SQL中的partition分区功能使用详解

    SQL中的partition分区功能使用详解

    本文介绍了SQL中的分区功能,包括使用ROW_NUMBER()窗口函数和PARTITION BY进行数据分组和排序,以及如何在创建表时进行物理分区以优化查询性能,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • SQL REGEXP 正则表达式详解

    SQL REGEXP 正则表达式详解

    SQL中的正则表达式(通常表示为REGEXP或RLIKE)是一种强大的模式匹配工具,允许你执行复杂的字符串搜索和匹配操作,本文给大家介绍SQL REGEXP 正则表达式的相关知识,感兴趣的朋友一起看看吧
    2025-04-04
  • SqlServer 数据库 三大  范式

    SqlServer 数据库 三大 范式

    本文将基于三大范式原则,结合具体的实例做简要分析,对SqlServer 数据库 三大 范式相关知识感兴趣的朋友一起看看吧
    2019-11-11
  • 数据库性能优化一:数据库自身优化提升性能

    数据库性能优化一:数据库自身优化提升性能

    数据库自身优化包括:增加次数据文件,设置文件自动增长、表分区,索引分区、分布式数据库设计、整理数据库碎片等等.需要了解的朋友可以参考下
    2013-01-01
  • SQL附加数据库失败问题的解决方法

    SQL附加数据库失败问题的解决方法

    这篇文章主要为大家详细介绍了SQL附加数据库失败问题的解决方法,感兴趣的小伙伴们可以参考一下
    2016-03-03

最新评论