MS SQLServer 将Table中的数据导出为insert语句

转载 2006年06月21日 16:41:00

在MS SQLServer中,导出数据只能使用微软-MS指定的几种格式,却不能导出为标准的Insert语句,这一点挺不好的,因为经常会有这样的需求。

如果要自动屏蔽自动增长的列,需要在查询系统表syscolumns时加上 autoval is null 的条件,见下面的红色部分。

原贴URL:http://www.im286.com/viewthread.php?tid=1195089

[SQLServer]将Table中的数据导出为insert语句

无论是上线还是平时测试,经常有这样的需求,现给出这个存储过程。

CREATE       proc dbo.proc_insert (@tablename varchar(256),@colid int=1)

/*

输入:(必选)Table名称, varchar

             (可选)从第几个栏位开始生成(比如id自增型的栏位就不需要显式insert),int

输出:产生的insert语句,每行一条。

说明:请勿在查询分析器里使用,否则只会得到被截断的语句。(用winsql可避免)

*/
as
begin
set nocount on
declare @sqlstr varchar(8000)
declare @sqlstr1 varchar(8000)
declare @sqlstr2 varchar(8000)
select @sqlstr='select ''insert '+@tablename
select @sqlstr1=''
select @sqlstr2=' ('
select @sqlstr1= ' values ( ''+'
select @sqlstr1=@sqlstr1+col+'+'',''+' ,@sqlstr2=@sqlstr2+name+',' from (select case
-- when a.xtype =173 then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+'['+a.name+']' +')'+' end'
when a.xtype =104 then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar(1),'+'['+a.name+']' +')'+' end'
when a.xtype =175 then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'''''''''+'+'replace('+'['+a.name+']'+','''''''','''''''''''')' + '+'''''''''+' end'
when a.xtype =61  then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+'['+a.name+']' +',121)'+ '+'''''''''+' end'
when a.xtype =106 then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+'['+a.name+']' +')'+' end'
when a.xtype =62  then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar(23),'+'['+a.name+']' +',2)'+' end'
when a.xtype =56  then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar(11),'+'['+a.name+']' +')'+' end'
when a.xtype =60  then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar(22),'+'['+a.name+']' +')'+' end'
when a.xtype =239 then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'''''''''+'+'replace('+'['+a.name+']'+','''''''','''''''''''')' + '+'''''''''+' end'
when a.xtype =108 then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+'['+a.name+']' +')'+' end'
when a.xtype =231 then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'''''''''+'+'replace('+'['+a.name+']'+','''''''','''''''''''')' + '+'''''''''+' end'
when a.xtype =59  then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar(23),'+'['+a.name+']' +',2)'+' end'
when a.xtype =58  then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'''''''''+'+'convert(varchar(23),'+'['+a.name+']' +',121)'+ '+'''''''''+' end'
when a.xtype =52  then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar(12),'+'['+a.name+']' +')'+' end'
when a.xtype =122 then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar(22),'+'['+a.name+']' +')'+' end'
when a.xtype =48  then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar(6),'+'['+a.name+']' +')'+' end'
-- when a.xtype =165 then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+'['+a.name+']' +')'+' end'
when a.xtype =167 then 'case when '+'['+a.name+']'+' is null then ''NULL'' else '+'''''''''+'+'replace('+'['+a.name+']'+','''''''','''''''''''')' + '+'''''''''+' end'
else '''NULL'''
end as col,a.colid,'['+a.name+']' as name
from syscolumns a where a.colid>=@colid and a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and  a.xtype <>36 and a.autoval is null
)t order by colid

select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+') '+left(@sqlstr1,len(@sqlstr1)-3)+')'' from '+@tablename
--  print @sqlstr
exec( @sqlstr)
set nocount off
end



执行范例:

exec proc_insert 'picsmdl'

将sqlserver表中的数据导出sql语句或生成insert into语句

--将sqlserver表中的数据导出sql语句或生成insert into语句 if Object_id('UspOutputData') is not null drop PROCEDU...
  • a771948524
  • a771948524
  • 2015年04月29日 10:58
  • 2028

MS SQLServer表数据生成Insert语句

数据库数据生成insert(MSSQL版),可将表中的数据生成insert或者update的sql脚本。比如您维护两个数据库,其中一个数据库中增加的数据也希望能够在另外一个数据中进行执行。...
  • swordmanli
  • swordmanli
  • 2016年09月17日 12:34
  • 302

sqlserver 导出数据信息为insert into 语句

查找了一下,没有一种直接的方法,跟同学交流后,他告诉了一种方式:用导入导出工具,把数据导成文本的格式,只是在“指定复制或查询”选择:用一条查询指定 要传输的数据输入的格式为:select insert...
  • riyao
  • riyao
  • 2007年08月10日 14:57
  • 2690

Oracle数据导出为Insert

       当我们对数据库操作时,有时,需要将Oracle数据库表中的数据导出为Insert 语句,这样可以在其它的数据库上执行。 这两天,我将以前用Oracle数据库的开发,用SQL Server...
  • striveman
  • striveman
  • 2007年10月29日 14:20
  • 6422

SQL Server 将查询结果导出插入(insert)语句的简单方式

SQL Server 将查询结果导出插入(insert)语句的简单方式
  • danny_style
  • danny_style
  • 2015年04月21日 09:46
  • 5642

SQLServer中数据导出为insert语句

Alter PROCEDURE dbo.UspOutputData @tablename sysname AS declare @column varchar(1000) declar...
  • jojojojo2002
  • jojojojo2002
  • 2012年11月27日 13:50
  • 260

SQL中SELECT INTO和INSERT INTO SELECT语句介绍

SQL SERVER数据库中,表复制是经常要用到的操作,下面就将为您介绍SQL中SELECT INTO和INSERT INTO SELECT语句,供您参考。 Insert是T-sql中常用语句,...
  • qq798833488
  • qq798833488
  • 2016年11月15日 14:44
  • 2627

从Oracle数据库中读取数据,自动生成INSERT语句

--Create Table:DROP TABLE Advance_Query;CREATE TABLE Advance_Query( Tbl   VARCHAR2(30) NOT NULL, --表...
  • striveman
  • striveman
  • 2006年09月08日 14:22
  • 4995

如何将sqlserver表中的数据导出sql语句或生成insert into语句

drop proc proc_insert go create proc proc_insert (@tablename varchar(256)) as begin set nocount...
  • duanmu19891209
  • duanmu19891209
  • 2015年01月08日 13:43
  • 6707

使用navicat for mysql 将查询语句过滤的结果导出成insert语句时没有带表名的解决办法

解决办法,将此查询先保存并取个名字,名字就为查询sql的表名,然后再导出...
  • wsbl52006
  • wsbl52006
  • 2017年11月30日 16:30
  • 228
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MS SQLServer 将Table中的数据导出为insert语句
举报原因:
原因补充:

(最多只允许输入30个字)