Ms-SQL中如何用代码导出表、存储过程、视图的结构
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 (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |