当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 将表数据生成SQL脚本的存储过程和工具

MSSQL
开源MySQL公司停止提供企业版源代码tar包
细化解析:MySQL+Webmin轻松创建数据库
用mysql做站点时怎样记录未知错误的发生
SQL数据库操作类
如何利用SQL Server数据库快照形成报表
SQL Server中应当怎样得到自动编号字段
SQL Server数据库连接中常见的错误分析
详细讲解SQL Server数据库的文件恢复技术
轻松掌握SQL Server数据库的六个实用技巧
SQL Server数据库涉及到的数据仓库概念
深入了解SQL Server 2008 商业智能平台
剖析SQL Server 事务日志的收缩和截断
如何在不同版本的SQL Server中存储数据
怎样缩小SQL Server数据库的日志文件
SQL Server中两种修改对象所有者的方法
轻松掌握SQL Server存储过程的命名标准
怎样从旧版本SQL Server中重新存储数据
快速掌握如何使用SQL Server来过滤数据
教你快速掌握两个SQL Server的维护技巧
有效地使用 SQL事件探查器的提示和技巧

MSSQL 中的 将表数据生成SQL脚本的存储过程和工具


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 132 ::
收藏到网摘: n/a

将表数据生成SQL脚本的存储过程示例:

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 你的表名

工具介绍:

1 InstallShield自带一个把SQL数据库的结构和数据导出为脚本的功能,很好用,如果刚好要做打包,建议用这个,因为安装文件比较大,如果不是做打包不建议用。

2 SqlInsert是一个专门导出数据为脚本的小工具,速度没IS的快,但是一样好用。