SQL Server里面如何导出SQL脚本???

SQL Server里面如何导出SQL脚本???,第1张

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生成的数据库脚本就可以了

有同事要导出一个数据库用户下创建索引的脚本,然后拿到另外一个库里面去执行。很少有这样的需求,问了一下,他们要进行数据迁移,在新的库中要求索引单独放在一个表空间里面,于是就把所有的索引都删除了,进行重建。

本来这个可以用如下方法来实现:

ALTER INDEX index_name rebuild tablespace tbs_name

既然索引已经删除了,就需要从原数据库中导出创建索引的脚本,索引是依附于表而存在的,没有办法用exp/expdp工具单独导出创建索引的脚本,不过我们可以通过如下方法进行:

1 生成批量导出索引的语句

在sqlplus中运行spool create_create_index.SQLSELECT'select dbms_metadata.get_ddl(''INDEX'', ' || ''''|| INDEX_NAME||'''' || ') from dual'FROMuser_indexes spool off

2 生成创建索引的sql语句

在sqlplus中运行spool create_index.SQL@create_create_index.SQLspool off

得到b.sql文件中即为创建索引的语句

3 创建索引

在sqlplus中运行@create_index.SQL

1、打开SQL Server,找到需要导出的数据库。

2、在需要导出的数据库上右击,选择任务选项中的导出数据选项。

3、SQL Server导入和导出向导窗口中,单击下一步按钮。

4、选择数据源对话框中,选择数据源选项中的Microsoft OLE DB Provider for SQL Server选项。

5、选择使用SQL Server身份验证,输入用户名和密码,选择要导出的数据库,单击下一步。

6、选择目标对话框中,选择目标选项中的Microsoft OLE DB Provider for SQL Server选项。

7、选择使用SQL Server身份验证,输入用户名和密码,单击新建按钮。

8、出现的创建数据库窗口中,在名称处输入一个导出数据库的名字,本例为NewData。

9、可以看到在数据库选项中,多出了一个NewData的名称,单击下一步。

10、指定复制或查询对话框中,选择复制一个或多个表或视图的数据选项,单击下一步。

11、选择源表和源视图对话框中,选择自己要导出的表和视图。

12、运行包对话框中,单击完成按钮。

13、数据就成功导出了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8091492.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存