使用SQL Server 自带的“生成SQL脚本”工具,可以生成创建表、视图、存储过程等的SQL脚本。那么,能否将表中的数据也生成为SQL脚本,在查询分析器中执行这些脚本后自动将数据导入到SQL Server中呢?答案是肯定的,网上收集资料如下:
CREATE PROCEDURE dbo.OutputData
@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 @tablename + '对象不存在'
return
end
set @objectname=rtrim(object_name(@objectId))
if @objectname is null or charindex(@objectname,@tablename)=0
begin
print @tablename + '对象不在当前数据库中'
return
end
if OBJECTPROPERTY(@objectId,'IsTable') < > 1 -- 判断对象是否是表
begin
print @tablename + '对象不是表'
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'
--定义游标,循环取数据并生成Insert语句
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'
调用时 exec OutputData 'myuser' 其中myUser中当前数据库中存在的表。
另外方丈的:
drop proc proc_insert
go
create proc proc_insert (@tablename varchar(256))
as
begin
set nocount on
declare @sqlstr varchar(4000)
declare @sqlstr1 varchar(4000)
declare @sqlstr2 varchar(4000)
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
from syscolumns a where a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and a.xtype <>36
)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
go
drop proc proc_insert
go
create proc proc_insert (@tablename varchar(256))
as
begin
set nocount on
declare @sqlstr varchar(4000)
declare @sqlstr1 varchar(4000)
declare @sqlstr2 varchar(4000)
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
from syscolumns a where a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and a.xtype <>36
)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
go
---------------------------------------------------------------------------------------
小干部的:
create proc spgeninsertsql
@tablename as varchar(100)
as
--declare @tablename varchar(100)
--set @tablename = orders
--set @tablename = eeducation
declare xcursor cursor for
select name,xusertype
from syscolumns
where (id = object_id(@tablename))
declare @f1 varchar(100)
declare @f2 integer
declare @sql varchar(8000)
set @sql =select insert into + @tablename + values(
open xcursor
fetch xcursor into @f1,@f2
while @@fetch_status = 0
begin
set @sql =@sql +
+ case when @f2 in (35,58,99,167,175,231,239,61) then + case when + @f1 + is null then else end + else + end
+ replace(isnull(cast( + @f1 + as varchar),null),,)
+ case when @f2 in (35,58,99,167,175,231,239,61) then + case when + @f1 + is null then else end + else + end
+ char(13) + ,
fetch next from xcursor into @f1,@f2
end
close xcursor
deallocate xcursor
set @sql = left(@sql,len(@sql) - 5) + + ) from + @tablename
print @sql
exec (@sql)
分享到:
相关推荐
SQL Server表数据生成INSERT SQL脚本 SQL Server是一种强大的关系数据库管理系统,提供了多种方式来生成INSERT SQL脚本,以便将数据导出到其他数据库或系统中。在本文中,我们将介绍如何使用SQL Server 2008中文版...
可以将数据库中的数据导出insert into脚本, sql server2008以上版本已经自带导出数据库数据成insert脚本功能,该工具针对2005以下版本.使用时先选择数据库服务器地址,在右侧选择Sql Server login,输入数据库账号...
5. **保存与执行**:用户可以保存生成的脚本为.sql文件,或者直接在连接的SQL Server实例上执行。 通过这样的工具,数据迁移和备份过程变得简单且高效,避免了手动编写大量`INSERT`语句的繁琐工作。特别是在处理...
此工具可以将SQL Server表数据导出成Insert语句。SQL Server的导入导出功能可以导出创建数据库各对象的脚本,却不提供导出目标表的现有数据为Insert语句的功能,此工具可以将SQL Server表数据导出成Insert语句。
在SQL Server数据库管理中,有时我们需要将表中的数据导出为Insert语句,这在数据迁移、备份或测试环境中非常常见。"SQL Server表数据导出成Insert语句的工具"是一个专门为此目的设计的应用程序,它能帮助数据库管理...
- **使用数据库工具**:大多数数据库管理工具(如MySQL Workbench, SQL Server Management Studio等)都提供了生成INSERT语句的功能。 - **编程方式**:通过编程语言(如Python, Java)连接数据库,遍历表中所有行...
描述中提到的“表数据生成SQL脚本”功能,具体来说,是指该工具能将SQL Server数据库中某个表的数据转换为INSERT语句的集合。这些INSERT语句可以按照一定的顺序执行,以复原表中的所有记录。例如,如果你有一个名为...
一款可自定义条件导出数据工具。SQLSERVER版数据库Insert语句生成工具。 因SQL server management studio及其它三方数据库管理工具无法做到导出SQL server数据库指定条件的数据。所以小编介绍一种python编写的脚本。
可以根据表内容自动生成insert 脚本,select 脚本,update脚本; blob和text数据类型的字段不支持。 可以方便定制需要的字段和条件。 维护SQL server 十分方便的小工具。 在不同数据库或服务器之间传递数据非常...
SQL Server生成INSERT脚本工具是一种实用程序,它能够帮助数据库管理员和开发人员高效地从现有的SQL Server数据库中自动生成插入语句(INSERT scripts),这些语句可以用于在其他数据库或备份环境中重现数据。...
SQL Server 表Insert脚本生成工具是一款实用的小型应用程序,专为数据库管理员和开发者设计,旨在简化数据库数据的导入和导出过程。在SQL Server环境中,当需要将现有数据迁移到新的环境,或者在软件升级时确保数据...
通过以上步骤,我们可以编写一个Delphi程序,实现连接到SQL Server数据库,并自动生成Insert脚本的功能。这个小工具对于数据库开发和管理非常有用,可以方便地进行数据迁移或备份。在实践中,还可以根据具体需求进行...
标题“数据库数据生成insert脚本(MSSQL版)”涉及的是在Microsoft SQL Server环境下,如何自动生成用于插入数据的SQL脚本。这样的脚本在数据迁移、备份、同步或测试场景中非常实用,可以极大地提高工作效率。描述中...
针对这个需求,存在一种名为“SQLServer数据库表中数据导出成SQL语句工具”的实用程序,它能够帮助我们高效地完成这项任务。这个工具通常以MHT(Multi-Part/Related)格式提供,这是一种单一文件Web页面存储格式,...
根据提供的文件信息,我们可以构建一个详细的SQL Server存储过程来实现将表中的数据转换为`INSERT INTO`脚本的功能。此存储过程将适用于多种数据类型,并能够动态生成插入语句,以便用户可以方便地导出数据作为脚本...
PyCharm 生成数据库表结构语句脚本和数据库数据 insert 语句的方法 PyCharm 是一款功能强大且流行的集成开发环境(IDE),它提供了许多实用的功能来帮助开发者更方便地开发、调试和维护项目。其中,PyCharm 的 ...
在SQL Server Management Studio (SSMS) 中,你可以右键点击数据库或具体的数据表,选择“任务” -> “生成脚本”,然后按照向导设置脚本的选项,如是否包含数据、脚本的目标版本等,最后即可生成对应的SQL脚本文件...
数据库Insert语句生成工具是针对SQL Server...综上所述,这个SQL Server数据库Insert语句生成工具结合了Python编程、SQL Server连接技术以及数据库管理的最佳实践,为数据迁移和初始化提供了一个方便快捷的解决方案。
请看下面的操作图解。 1.使用Sql Server Management Studio 2008 连接数据库。 ...SQL Server 2008将数据导出为脚本 从SQL SERVER 2008开始,我们就可以很方便的导出数据脚本,而无需再借助存储过
在SQL SERVER环境中,有时我们需要将数据库的信息以报告的形式呈现,比如导出为Word文档,方便阅读和分享。"SQL SERVER自动导出Word数据库文档"这一功能就满足了这样的需求。这个功能主要应用于SQL SERVER 2000、...