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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:
通常情况下,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语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
相关文章
|
6天前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
21天前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
28天前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
29天前
|
SQL 数据挖掘 数据库
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
|
1月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
143 4
|
10天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
22 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
79 0
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
102 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。