SQLServer存储过程生成insert语句实例

   2015-08-01 0
核心提示:这篇文章主要介绍了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')

 
标签: 存储过程 insert
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Oracle 存储过程,临时表,动态SQL测试
    --创建事务级别的结果临时表create global temporary table tmp_yshy( c1 varchar2(100), c2 varchar2(100))on commit delete rows;--创建事务级别的存储sql语句的临时表create global temporary table tmp_sql( c1 varchar2(4000))on commit delete rows;测
    02-10
  • MYSQL和ORACLE的触发器与存储过程语法差异
    整改了一番脚本,遇到了一些两种数据库之间的差异,记录一下:触发器:差异MYSQLORACLE说明创建语句不同create trigger `AA` BEFORE INSERT on `BB` for each row create or replace trigger AA  before insert or update or delete on BB  for each ro
    02-10
  • MySQL存储过程实现动态执行SQL mysql 存储过程
    --存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数create procedure p_procedurecode(in sumdate varchar(10)) begin declare v_sql varchar(500);--需要执行的SQL语句 declare sym varchar(6);declare var1 varchar(20); d
    02-10
  • SQL与oracle分页存储过程 sql实现oracle分页
    SQL分页存储过程///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////CREATE PROCEDURE [dbo].[sp_PageIndex]( -- Add the parameters for the stored procedure here @tblName varc
    02-10
  • sql Sever的存储过程转换为mysql的
    总体来说,sql sever和Mysql的存储过程的思路都是一样的,但是在语法和结构上还是有很大的区别的。1. 在mysql中写存储过程所有的dbo都要去掉。2. 每一个sql语句后面都需要加上;否则报错;4. 再说参数,在MSSQL中我们一般会这么定义参数1234CREATE PROCEDU
    02-10
  • oracle 存储过程使用动态sql
    Oracle存储过程使用动态SQL 有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者。DDL和DML (注意DDL中可以用拼接字符串的方法用来create table或drop table,在DML中,类似于insert则不可以直接用execute immediate中直接拼接的方法,必须用using
    02-10
  • oracle存储过程例子,包含函数,动态执行sql
     如下: 1 create or replace procedure JDGL_PRO_GET_DFLZJSBB3(p_date1 in varchar2, res OUT sys_refcursor) is2 3 strSql clob;4 5FUNCTION CONACT_SQL_JS(XFAJ0902 IN VARCHAR2,XFAJ0903 IN VARCHAR2) RETURN clob AS6BEGIN7 RETURN'8 SELECT9--合计省
    02-10
  • MySql带参数的存储过程编写(动态执行SQL语句)
     该存储过程是根据用户输入的条件和排序方式查询用户的信息,排序条件可以没有调用方式:call GetUsersDynamic('age=30','');/********动态查询用户的信息********/CREATE PROCEDURE GetUsersDynamic(WhereCondition varchar(500),OrderByExpress varchar(10
    02-10
  • ORACLE动态sql在存储过程中出现表或视图不存在
    Oracle动态sql在存储过程中出现表或视图不存在的解决方法  CREATE OR REPLACE PROCEDURE P_testisstrsql varchar2(2000);BEGIN     --导入用户数据数据                strsql := 'insert into tabuser (usercode) select us.tabuser.u
    02-09
  • Oracle 在函数或存储过程中执行sql查询字符串并
    请看黄色部分 IF CUR_MONTH_BILL_ID0 --区县指标 THENTVALUE_SQL :='SELECT TO_CHAR(' || CUR_ROW.MAIN_FIELD || ') FROM ' || CUR_ROW.END_TABLE || '_' || CUR_MONTH || ' WHERE TO_CHAR(DISTRICT_ID)=''' || CUR_ROW.E_DISTRICT_
    02-09
点击排行