MSsql2005中生成脚本问题

i烤麸 2009-11-22 11:38:55
在MSsql2005中的数据库->任务->生成脚本,然后会生成一个数据库脚本文件 .sql ,但是这个文件中只包含了数据库中表的建立语句和表中列的建立语句,如何能够让表中每一条数据以INSERT语句的形式也生成进.sql文件中?这样我就可以保留.sql文件,就可以保留整个数据库的数据了,而不仅仅是表的设计。
...全文
363 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不知道楼主想干什么
i烤麸 2009-12-14
  • 打赏
  • 举报
回复
谢谢大家了 看来只能写程序解决了
我自己的解决方法也是用sql自己写 看来sql2005应该是没这种功能吧 哈哈
icelovey 2009-11-22
  • 打赏
  • 举报
回复

我的天,那万一那表里面100W数据,那你的脚本文件得多大啊?

你要保留整个数据库的数据的话, 做个备份不是很好吗? 什么东西都在里面
yzli840324 2009-11-22
  • 打赏
  • 举报
回复
没听说过还有这种功能,备份恢复吧
claro 2009-11-22
  • 打赏
  • 举报
回复
MySQL导出数据时可以保存成脚本的形式,MSsql暂时没有。
laker_914 2009-11-22
  • 打赏
  • 举报
回复
你还不如写个程序来的快些呢
dawugui 2009-11-22
  • 打赏
  • 举报
回复
你还不如直接备份数据库.
dawugui 2009-11-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 laizhenhai88 的回复:]
在MSsql2005中的数据库->任务->生成脚本,然后会生成一个数据库脚本文件 .sql ,但是这个文件中只包含了数据库中表的建立语句和表中列的建立语句,如何能够让表中每一条数据以INSERT语句的形式也生成进.sql文件中?这样我就可以保留.sql文件,就可以保留整个数据库的数据了,而不仅仅是表的设计。
[/Quote]
将表数据生成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 你的表名
dla001 2009-11-22
  • 打赏
  • 举报
回复
直接备份整个数据库不更好,反正不大。建个新数据库只放你想要备份的表,备份数据库就OK了。
MSSQL没有你说的那种备份。
fa_ge 2009-11-22
  • 打赏
  • 举报
回复
直接把数据库备份下来.
icelovey 2009-11-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 laizhenhai88 的回复:]
我知道你的意思,但是现在老师要用程序来建立数据库,我也没办法,需要自己写一堆insert的话,还不如让MSsql自己生成方便,可是不知道怎样生成啊。by the way,这个数据库里的信息很少很少,我只是求一个方法,不求实际应用的效率。
[/Quote]
字段生成的脚本里面不会有INSERT这些东西的。

如果你实在想要, 又像你说的数据不多的话, 自己写几条INSERT语句在那里也是很简单的事情, 这样就可以解决了!
feixianxxx 2009-11-22
  • 打赏
  • 举报
回复
不知所云~
i烤麸 2009-11-22
  • 打赏
  • 举报
回复
我知道你的意思,但是现在老师要用程序来建立数据库,我也没办法,需要自己写一堆insert的话,还不如让MSsql自己生成方便,可是不知道怎样生成啊。by the way,这个数据库里的信息很少很少,我只是求一个方法,不求实际应用的效率。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧