加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Ms-SQL中如何用代码导出表、存储过程、视图的结构

发布时间:2022-11-25 21:31:24 所属栏目:MsSql教程 来源:转载
导读: if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)
drop procedure File2Table
go
/*--实现数据导入/导出的存储过程

if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)

drop procedure File2Table

go

/*--实现数据导入/导出的存储过程

可以实现导入/导出 整个数据库/指定表 到文本文件

--邹建 2003.07(引用请保留此信息)--*/

/*--调用示例

--导出指定表

exec file2table @tbname=N'jobs,pub_info',@filename='c:/[@tbname].txt'

--导出所有表

exec file2table @filename='c:/[@dbname]_[@tbname].txt'

--导入所有表

exec file2table @filename='c:/[@dbname]_[@tbname].txt',@isout=0

--*/

create procedure File2Table

@tbname nvarchar(4000)='', --表名列表,如果不指定,则表示所有用户表

@filename nvarchar(1000)='', --导出的文件名,如果不指定,导出到SQL Server的默认备份目录/[@dbname]_[@tbname].txt,其中[@dbname]在处理中会替换为数据库名,[@dbname]会用表名代替

@isout bit=1, --1为导出(默认),0为导入

@username sysname='', --用户名,如果sql不允许使用NT验证方式登录,则必须指定

@password sysname='', --密码

@code char(1)=N'N' --文件编码,可以是n,c,N,W,作用参考bcp语法(如果是数据传输需要,建议用N)

as

declare @s nvarchar(4000)

if isnull(@code,N'') not in(N'n',N'c',N'N',N'W')

set @code='N'

--备份文件名

if isnull(@filename,N'')=N''

begin

select top 1 @filename=rtrim(reverse(filename))

from master.dbo.sysfiles

where name=N'master'

select @filename=stuff(@filenamemssql复制表,1,charindex('/',@filename),N'')

,@filename=reverse(stuff(@filename,1,charindex('/',@filename),N''))

+N'/BACKUP/'+db_name()+N'_[@tbname].txt'

end

else

set @filename=replace(@filename,N'[@dbname]',db_name())

declare tb cursor local

for

select N'bcp "'+db_name()

+N'.'+quotename(user_name(uid))

+N'.'+quotename(name)

+N'"'

+case when @isout=1 then N' out' else N' in' end

+N' "'

+replace(@filename,N'[@tbname]',name)

+N'" /'+@code

+case when isnull(@username,N'')=N'' then N' /T'

else N' /U"

+N'" /P"'+isnull(@password,N'')+N'"'

end

from sysobjects

where xtype=N'U' and status>=0

and(isnull(@tbname,N'')=''

or charindex(','+name+',',','+@tbname+',')>0)

open tb

fetch tb into @s

while @@fetch_status=0

begin

exec master..xp_cmdshell @s,no_output

fetch tb into @s

end

close tb

deallocate tb

go

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!