﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-冰山日记本-文章分类-SQL</title><link>http://www.cnitblog.com/hdwong/category/1485.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 01 Oct 2011 18:12:11 GMT</lastBuildDate><pubDate>Sat, 01 Oct 2011 18:12:11 GMT</pubDate><ttl>60</ttl><item><title>查找数据表中不存在的ID号</title><link>http://www.cnitblog.com/hdwong/articles/6527.html</link><dc:creator>冰山一角</dc:creator><author>冰山一角</author><pubDate>Thu, 09 Feb 2006 09:48:00 GMT</pubDate><guid>http://www.cnitblog.com/hdwong/articles/6527.html</guid><wfw:comment>http://www.cnitblog.com/hdwong/comments/6527.html</wfw:comment><comments>http://www.cnitblog.com/hdwong/articles/6527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/hdwong/comments/commentRss/6527.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/hdwong/services/trackbacks/6527.html</trackback:ping><description><![CDATA[<DIV class=postTitle>CREATE PROCEDURE sp_recycle<BR>AS<BR>DECLARE @maxid int,@sql varchar(8000)<BR>IF exists(SELECT * FROM t)<BR>BEGIN<BR>&nbsp; SELECT @maxid=MAX(id) FROM t<BR>&nbsp; CREATE TABLE #t(id int)<BR>&nbsp; SET @sql='SELECT TOP '+CAST(@maxid AS varchar)+' IDENTITY(int,1,1) id<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INTO #tem FROM syscolumns a,syscolumns b,syscolumns c<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INSERT #t<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT * FROM #tem<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DROP TABLE #tem '<BR>&nbsp; EXEC(@sql)<BR>&nbsp; SELECT id FROM #t WHERE not exists(SELECT * FROM t WHERE id=#t.id)<BR>&nbsp; DROP TABLE #t<BR>END<BR>GO<BR></DIV><img src ="http://www.cnitblog.com/hdwong/aggbug/6527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/hdwong/" target="_blank">冰山一角</a> 2006-02-09 17:48 <a href="http://www.cnitblog.com/hdwong/articles/6527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打包数据库到安装程序中</title><link>http://www.cnitblog.com/hdwong/articles/6073.html</link><dc:creator>冰山一角</dc:creator><author>冰山一角</author><pubDate>Sat, 07 Jan 2006 08:28:00 GMT</pubDate><guid>http://www.cnitblog.com/hdwong/articles/6073.html</guid><wfw:comment>http://www.cnitblog.com/hdwong/comments/6073.html</wfw:comment><comments>http://www.cnitblog.com/hdwong/articles/6073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/hdwong/comments/commentRss/6073.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/hdwong/services/trackbacks/6073.html</trackback:ping><description><![CDATA[方法1. 备份/恢复<BR>先备份数据库:<BR>	backup database 数据库 to disk='c:\备份.bak'<BR><BR>将备份文件打包到安装程序中.<BR><BR>在第一次运行程序的时候,进行数据库恢复(或专门做一个系统配置的程序,来控制完成此工作)<BR>	restore database 数据库 from disk='c:\备份.bak'<BR><BR><BR>方法2. 分离/附加<BR><BR>先分离数据库:<BR>	sp_detach_db '数据库名'<BR><BR>将数据文件(.mdf)和日志文件(.ldf)打包到安装程序中<BR><BR>在第一次运行程序的时候,进行数据库附加(或专门做一个系统配置的程序,来控制完成此工作)<BR>	sp_attach_db '数据库名','数据文件名(.mdf)','日志文件名(.ldf)'<BR><BR><BR>方法3. 用数据库脚本<BR><BR>生成数据库脚本:<BR>sql200企业管理器<BR>&nbsp; --右键要导出的数据库<BR>&nbsp; --所有任务<BR>&nbsp; --生成SQL脚本<BR>&nbsp; --&lt;常规&gt;里选择"生成全部对象脚本"","在脚本文件中包含说明性标题"选上<BR>&nbsp; --&lt;设置格式&gt;里,将"包含扩展属性",选上<BR>&nbsp; --&lt;选项&gt;中,将"表脚本选项"中的内容全部选择上<BR>&nbsp; --&lt;选项&gt;中,"安全性选项"是决定是否要包含创建数据库及用户权限等的设置,根据你的需要选择<BR>&nbsp; --其他所有的选项保持默认值<BR>&nbsp; --然后确定,将其保存成一个.sql文件<BR><BR>生成数据脚本(借用第三方工具):<BR>SQL&nbsp; Server&nbsp; 数据库SQL脚本导出器1.0<BR>(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持所有数据类型（如binary,text,image)<BR>(2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持表结构、索引、所有记录到SQL脚本<BR>(3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 支持数据库、表的浏览<BR>(4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL语句的编辑、执行<BR>(5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可备份数据库、表结构、记录<BR><BR>将脚本文件打包到安装程序中.<BR><BR>在第一次运行程序的时候,执行脚本(或专门做一个系统配置的程序,来控制完成此工作),通过调用isql.exe文件完成.<BR>	exec master..xp_cmdshell 'isql /E /i".sql文件"'<BR>	也可以直接在程序中调用isql.exe文件.或直接将isql.exe文件集成到程序安装包中<BR><img src ="http://www.cnitblog.com/hdwong/aggbug/6073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/hdwong/" target="_blank">冰山一角</a> 2006-01-07 16:28 <a href="http://www.cnitblog.com/hdwong/articles/6073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何实现行列转换</title><link>http://www.cnitblog.com/hdwong/articles/6061.html</link><dc:creator>冰山一角</dc:creator><author>冰山一角</author><pubDate>Fri, 06 Jan 2006 15:59:00 GMT</pubDate><guid>http://www.cnitblog.com/hdwong/articles/6061.html</guid><wfw:comment>http://www.cnitblog.com/hdwong/comments/6061.html</wfw:comment><comments>http://www.cnitblog.com/hdwong/articles/6061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/hdwong/comments/commentRss/6061.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/hdwong/services/trackbacks/6061.html</trackback:ping><description><![CDATA[<P>1、固定列数的行列转换<BR>如<BR>student subject grade<BR>---------------------------<BR>student1 语文 80<BR>student1 数学 70<BR>student1 英语 60<BR>student2 语文 90<BR>student2 数学 80<BR>student2 英语 100<BR>……<BR>转换为 <BR>语文 数学 英语<BR>student1 80 70 60<BR>student2 90 80 100<BR>……<BR>语句如下：<BR>select student,sum(decode(subject,'语文', grade,null)) "语文",<BR>sum(decode(subject,'数学', grade,null)) "数学",<BR>sum(decode(subject,'英语', grade,null)) "英语"<BR>from table<BR>group by student</P>
<P>2、不定列行列转换<BR>如<BR>c1 c2<BR>--------------<BR>1 我<BR>1 是<BR>1 谁<BR>2 知<BR>2 道<BR>3 不<BR>……<BR>转换为<BR>1 我是谁<BR>2 知道<BR>3 不<BR>这一类型的转换必须借助于PL/SQL来完成，这里给一个例子<BR>CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER) <BR>RETURN VARCHAR2 <BR>IS <BR>Col_c2 VARCHAR2(4000); <BR>BEGIN<BR>FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP <BR>Col_c2 := Col_c2||cur.c2; <BR>END LOOP; <BR>Col_c2 := rtrim(Col_c2,1);<BR>RETURN Col_c2; <BR>END;<BR>/<BR>SQL&gt; select distinct c1 ,get_c2(c1) cc2 from table;即可</P><img src ="http://www.cnitblog.com/hdwong/aggbug/6061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/hdwong/" target="_blank">冰山一角</a> 2006-01-06 23:59 <a href="http://www.cnitblog.com/hdwong/articles/6061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL语句导入导出大全</title><link>http://www.cnitblog.com/hdwong/articles/4994.html</link><dc:creator>冰山一角</dc:creator><author>冰山一角</author><pubDate>Tue, 29 Nov 2005 07:26:00 GMT</pubDate><guid>http://www.cnitblog.com/hdwong/articles/4994.html</guid><wfw:comment>http://www.cnitblog.com/hdwong/comments/4994.html</wfw:comment><comments>http://www.cnitblog.com/hdwong/articles/4994.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/hdwong/comments/commentRss/4994.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/hdwong/services/trackbacks/4994.html</trackback:ping><description><![CDATA[<P>/*******&nbsp; 导出到excel<BR>EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'</P>
<P>/***********&nbsp; 导入Excel<BR>SELECT * <BR>FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',<BR>&nbsp; 'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions</P>
<P>/*动态文件名<BR>declare @fn varchar(20),@s varchar(1000)<BR>set @fn = 'c:\test.xls'<BR>set @s ='''Microsoft.Jet.OLEDB.4.0'',<BR>''Data Source="<A href="mailto:'+@fn+'&quot;;User">'+@fn+'";User</A> ID=Admin;Password=;Extended properties=Excel 5.0'''<BR>set @s = 'SELECT * FROM OpenDataSource (<A href="mailto:'+@s+')...sheet1$'">'+@s+')...sheet1$'</A><BR>exec(@s)<BR>*/</P>
<P>SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+'　' 转换后的别名<BR>FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',<BR>&nbsp; 'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions</P>
<P>/********************** EXCEL导到远程SQL<BR>insert OPENDATASOURCE(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'SQLOLEDB',<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Data Source=远程ip;User ID=sa;Password=密码'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ).库名.dbo.表名 (列名1,列名2)<BR>SELECT 列名1,列名2<BR>FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',<BR>&nbsp; 'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions</P>
<P><BR>/** 导入文本文件<BR>EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword'</P>
<P>/** 导出文本文件<BR>EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword'<BR>或<BR>EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'</P>
<P>导出到TXT文本，用逗号分开<BR>exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password'</P>
<P><BR>BULK INSERT 库名..表名<BR>FROM 'c:\test.txt'<BR>WITH (<BR>&nbsp;&nbsp;&nbsp; FIELDTERMINATOR = ';',<BR>&nbsp;&nbsp;&nbsp; ROWTERMINATOR = '\n'<BR>)</P>
<P><BR>--/* dBase IV文件<BR>select * from <BR>OPENROWSET('MICROSOFT.JET.OLEDB.4.0'<BR>,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')<BR>--*/</P>
<P>--/* dBase III文件<BR>select * from <BR>OPENROWSET('MICROSOFT.JET.OLEDB.4.0'<BR>,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')<BR>--*/</P>
<P>--/* FoxPro 数据库<BR>select * from openrowset('MSDASQL',<BR>'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',<BR>'select * from [aa.DBF]')<BR>--*/</P>
<P>/**************导入DBF文件****************/<BR>select * from openrowset('MSDASQL',<BR>'Driver=Microsoft Visual FoxPro Driver;<BR>SourceDB=e:\VFP98\data;<BR>SourceType=DBF',<BR>'select * from customer where country != "USA" order by country')<BR>go<BR>/***************** 导出到DBF ***************/<BR>如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句</P>
<P>insert into openrowset('MSDASQL',<BR>'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',<BR>'select * from [aa.DBF]')<BR>select * from 表</P>
<P>说明:<BR>SourceDB=c:\&nbsp; 指定foxpro表所在的文件夹<BR>aa.DBF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指定foxpro表的文件名.</P>
<P>&nbsp;</P>
<P><BR>/*************导出到Access********************/<BR>insert into openrowset('Microsoft.Jet.OLEDB.4.0', <BR>&nbsp;&nbsp; 'x:\A.mdb';'admin';'',A表) select * from 数据库名..B表</P>
<P>/*************导入Access********************/<BR>insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0', <BR>&nbsp;&nbsp; 'x:\A.mdb';'admin';'',A表)</P>
<P>文件名为参数<BR>declare @fname varchar(20)<BR>set @fname = 'd:\test.mdb'<BR>exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',<BR>&nbsp;&nbsp;&nbsp; <A href="mailto:'''+@fname+''';''admin'';''''">'''+@fname+''';''admin'';''''</A>, topics) as a ')</P>
<P>SELECT * <BR>FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',<BR>&nbsp; 'Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;')...产品</P>
<P>*********************&nbsp; 导入 xml　文件</P>
<P>DECLARE @idoc int<BR>DECLARE @doc varchar(1000)<BR>--sample XML document<BR>SET @doc ='<BR>&lt;root&gt;<BR>&nbsp; &lt;Customer cid= "C1" name="Janine" city="Issaquah"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Order oid="O1" date="1/20/1996" amount="3.5" /&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Order oid="O2" date="4/30/1997" amount="13.4"&gt;Customer was very satisfied<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Order&gt;<BR>&nbsp;&nbsp; &lt;/Customer&gt;<BR>&nbsp;&nbsp; &lt;Customer cid="C2" name="Ursula" city="Oelde" &gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; white red"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Urgency&gt;Important&lt;/Urgency&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Happy Customer.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Order&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Order oid="O4" date="1/20/1996" amount="10000"/&gt;<BR>&nbsp;&nbsp; &lt;/Customer&gt;<BR>&lt;/root&gt;<BR>'<BR>-- Create an internal representation of the XML document.<BR>EXEC sp_xml_preparedocument @idoc OUTPUT, @doc</P>
<P>-- Execute a SELECT statement using OPENXML rowset provider.<BR>SELECT *<BR>FROM OPENXML (@idoc, '/root/Customer/Order', 1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WITH (oid&nbsp;&nbsp;&nbsp;&nbsp; char(5), <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; amount&nbsp; float, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; comment ntext 'text()')<BR>EXEC sp_xml_removedocument @idoc</P>
<P>&nbsp;</P>
<P>???????</P>
<P>/**********************Excel导到Txt****************************************/<BR>想用<BR>select * into opendatasource(...) from opendatasource(...)<BR>实现将一个Excel文件内容导入到一个文本文件</P>
<P>假设Excel中有两列，第一列为姓名，第二列为很行帐号(16位)<BR>且银行帐号导出到文本文件后分两部分，前8位和后8位分开。</P>
<P><BR>邹健：<BR>如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2<BR>然后就可以用下面的语句进行插入<BR>注意文件名和目录根据你的实际情况进行修改.</P>
<P>insert into<BR>opendatasource('MICROSOFT.JET.OLEDB.4.0'<BR>,'Text;HDR=Yes;DATABASE=C:\'<BR>)...[aa#txt]<BR>--,aa#txt)<BR>--*/<BR>select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8) <BR>from <BR>opendatasource('MICROSOFT.JET.OLEDB.4.0'<BR>,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls'<BR>--,Sheet1$)<BR>)...[Sheet1$]</P>
<P>&nbsp;</P>
<P>如果你想直接插入并生成文本文件,就要用bcp</P>
<P>declare @sql varchar(8000),@tbname varchar(50)</P>
<P>--首先将excel表内容导入到一个全局临时表<BR>select @tbname='[##temp'+cast(newid() as varchar(40))+']'<BR>&nbsp;,@sql='select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8) <BR>&nbsp;into <A href="mailto:'+@tbname+'">'+@tbname+'</A> from <BR>opendatasource(''MICROSOFT.JET.OLEDB.4.0''<BR>,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls''<BR>)...[Sheet1$]'<BR>exec(@sql)</P>
<P>--然后用bcp从全局临时表导出到文本文件<BR>set @sql='bcp "<A href="mailto:'+@tbname+'">'+@tbname+'</A>" out "c:\aa.txt" /S"(local)" /P"" /c'<BR>exec master..xp_cmdshell @sql</P>
<P>--删除临时表<BR>exec('drop table <A href="mailto:'+@tbname">'+@tbname</A>)</P>
<P><BR>/********************导整个数据库*********************************************/</P>
<P>用bcp实现的存储过程</P>
<P><BR>/*<BR>&nbsp;实现数据导入/导出的存储过程<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据不同的参数,可以实现导入/导出整个数据库/单个表<BR>&nbsp;调用示例:<BR>--导出调用示例<BR>----导出单个表<BR>exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',1<BR>----导出整个数据库<BR>exec file2table 'zj','','','xzkh_sa','C:\docman',1</P>
<P>--导入调用示例<BR>----导入单个表<BR>exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',0<BR>----导入整个数据库<BR>exec file2table 'zj','','','xzkh_sa','C:\docman',0</P>
<P>*/<BR>if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)<BR>&nbsp;drop procedure File2Table<BR>go<BR>create procedure File2Table<BR>@servername varchar(200)&nbsp; --服务器名<BR>,@username varchar(200)&nbsp;&nbsp; --用户名,如果用NT验证方式,则为空''<BR>,@password varchar(200)&nbsp;&nbsp; --密码<BR>,@tbname varchar(500)&nbsp;&nbsp; --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表<BR>,@filename varchar(1000)&nbsp; --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt<BR>,@isout bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --1为导出,0为导入<BR>as<BR>declare @sql varchar(8000)</P>
<P>if @tbname like '%.%.%' --如果指定了表名,则直接导出单个表<BR>begin<BR>&nbsp;set @sql='bcp <A href="mailto:'+@tbname">'+@tbname</A><BR>&nbsp; +case when @isout=1 then ' out ' else ' in ' end<BR>&nbsp; +' "<A href="mailto:'+@filename+'">'+@filename+'</A>" /w'<BR>&nbsp; +' /S <A href="mailto:'+@servername">'+@servername</A><BR>&nbsp; +case when isnull(@username,'')='' then '' else ' /U <A href="mailto:'+@username">'+@username</A> end<BR>&nbsp; +' /P '+isnull(@password,'')<BR>&nbsp;exec master..xp_cmdshell @sql<BR>end<BR>else<BR>begin --导出整个数据库,定义游标,取出所有的用户表<BR>&nbsp;declare @m_tbname varchar(250)<BR>&nbsp;if right(@filename,1)&lt;&gt;'\' set @filename=@filename+'\'</P>
<P>&nbsp;set @m_tbname='declare #tb cursor for select name from <A href="mailto:'+@tbname+'..sysobjects">'+@tbname+'..sysobjects</A> where xtype=''U'''<BR>&nbsp;exec(@m_tbname)<BR>&nbsp;open #tb<BR>&nbsp;fetch next from #tb into @m_tbname<BR>&nbsp;while @@fetch_status=0<BR>&nbsp;begin<BR>&nbsp; set @sql='bcp <A href="mailto:'+@tbname+'..'+@m_tbname">'+@tbname+'..'+@m_tbname</A><BR>&nbsp;&nbsp; +case when @isout=1 then ' out ' else ' in ' end<BR>&nbsp;&nbsp; +' "<A href="mailto:'+@filename+@m_tbname+'.txt">'+@filename+@m_tbname+'.txt</A> " /w'<BR>&nbsp;&nbsp; +' /S <A href="mailto:'+@servername">'+@servername</A><BR>&nbsp;&nbsp; +case when isnull(@username,'')='' then '' else ' /U <A href="mailto:'+@username">'+@username</A> end<BR>&nbsp;&nbsp; +' /P '+isnull(@password,'')<BR>&nbsp; exec master..xp_cmdshell @sql<BR>&nbsp; fetch next from #tb into @m_tbname<BR>&nbsp;end<BR>&nbsp;close #tb<BR>&nbsp;deallocate #tb <BR>end<BR>go</P>
<P><BR>/************* Oracle **************/<BR>EXEC sp_addlinkedserver 'OracleSvr', <BR>&nbsp;&nbsp; 'Oracle 7.3', <BR>&nbsp;&nbsp; 'MSDAORA', <BR>&nbsp;&nbsp; 'ORCLDB'<BR>GO</P>
<P>delete from openquery(mailser,'select *&nbsp; from yulin')</P>
<P>select *&nbsp; from openquery(mailser,'select *&nbsp; from yulin')</P>
<P>update openquery(mailser,'select * from&nbsp; yulin where id=15')set disorder=555,catago=888</P>
<P>insert into openquery(mailser,'select disorder,catago from&nbsp; yulin')values(333,777)</P>
<P>&nbsp;</P>
<P>补充：</P>
<P>对于用bcp导出,是没有字段名的.</P>
<P>用openrowset导出,需要事先建好表.</P>
<P>用openrowset导入,除ACCESS及EXCEL外,均不支持非本机数据导入</P><img src ="http://www.cnitblog.com/hdwong/aggbug/4994.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/hdwong/" target="_blank">冰山一角</a> 2005-11-29 15:26 <a href="http://www.cnitblog.com/hdwong/articles/4994.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>