SQL Server里面如何导出包含数据的SQL脚本

简介:
通常情况下,SQL Server里面的生成SQL脚本,只会包含数据库及表的字段结构,而不会包含表的数据,也就是SQL脚本里面只有Create database,Create table 这样的语句,没有insert into。
因为SQL Server并不包含这个功能,只能靠第三方的代码了。 
以下存储过程可以实现:
CREATE  PROCEDURE dbo.UspOutputData    
@tablename sysname    
AS    
declare @ column  varchar(1000)    
declare @columndata  varchar(1000)    
declare @sql  varchar(4000)    
declare @xtype  tinyint    
declare @ name sysname    
declare @objectId  int    
declare @objectname sysname    
declare @ident  int    

set nocount  on    
set @objectId= object_id(@tablename)    

if @objectId  is  null  -- 判断对象是否存在    
begin    
print  'The object not exists'    
return    
end    
set @objectname= rtrim( object_name(@objectId))    

if @objectname  is  null  or  charindex(@objectname,@tablename)=0  --此判断不严密    
begin    
print  'object not in current database'    
return    
end    

if  OBJECTPROPERTY(@objectId, 'IsTable') < > 1  -- 判断对象是否是table    
begin    
print  'The object is not table'    
return    
end    

select @ident=status&0x80  from  syscolumns  where id=@objectid  and status&0x80=0x80    

if @ident  is  not  null    
print  'SET IDENTITY_INSERT '+@TableName+ ' ON'    

declare syscolumns_cursor  cursor    

for  select c. name,c.xtype  from  syscolumns c  where c.id=@objectid  order  by c.colid    

open syscolumns_cursor    
set @ column= ''    
set @columndata= ''    
fetch next  from syscolumns_cursor  into @ name,@xtype    

while @@fetch_status < >-1    
begin    
if @@fetch_status < >-2    
begin    
if @xtype  not  in(189,34,35,99,98)  --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理    

begin    
set @ column=@ column+ case  when  len(@ column)=0  then ''  else  ',' end+@ name    

set @columndata=@columndata+ case  when  len(@columndata)=0  then  ''  else  ',' ',' ','    
end    

+ case  when @xtype  in(167,175)  then  '' '' '' '' '+'+@ name+ '+' '' '' '' ''  --varchar,char    
when @xtype  in(231,239)  then  '' 'N' '' '' '+'+@ name+ '+' '' '' '' ''  --nvarchar,nchar    
when @xtype=61  then  '' '' '' '' '+convert(char(23),'+@ name+ ',121)+' '' '' '' ''  --datetime    
when @xtype=58  then  '' '' '' '' '+convert(char(16),'+@ name+ ',120)+' '' '' '' ''  --smalldatetime    
when @xtype=36  then  '' '' '' '' '+convert(char(36),'+@ name+ ')+' '' '' '' ''  --uniqueidentifier    
else @ name  end    

end    

end    

fetch next  from syscolumns_cursor  into @ name,@xtype    

end    

close syscolumns_cursor    
deallocate syscolumns_cursor    

set @sql= 'set nocount on select ' 'insert '+@tablename+ '('+@ column+ ') values(' 'as ' '--'','+@columndata+','')'' from '+@tablename    

print '--'+@sql    
exec(@sql)    

if @ident is not null    
print 'SET IDENTITY_INSERT '+@TableName+' OFF'    

GO
 
使用方法: 

exec UspOutputData 你的表名 

选择【执行模式】为“以文本显示结果”,然后将运行后的结果存成.sql,加上用SQL Server生成的数据库脚本就可以了。
另外可以利用第三方工具,导出数据可以用powerbuilder。在database painter里面,用SQL选出,或者直接打开表,点击生成的list datawindow,然后在菜单file->save rows as->选择SQL,那么生成的SQL语句就包括建表和insert数据的SQL了。













本文转自周金桥51CTO博客,原文链接: http://blog.51cto.com/zhoufoxcn/166427  ,如需转载请自行联系原作者






相关文章
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
SQL 关系型数据库 MySQL
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
1007 9
|
SQL 容灾 关系型数据库
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。
1213 0
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
729 4
|
SQL 关系型数据库 Shell
SQL整库导出语录及其实用技巧与方法
在数据库管理和备份恢复过程中,整库导出是一项至关重要的任务
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
300 0
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1804 152
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
1239 156
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。