一、过滤重复数据

1、完全重复的记录

  1. /* 功能:指定字段完全重复 * 
  2. select distinct 字段1,字段2,字段3 from 数据表  

2、部分关键字段重复的记录

和 "常用sql语句实例大全(含过滤及删除重复数据、导入导出数据等)" 有关的数据库编程小帖士:

strong>ROWIDTOCHAR
        ROWIDTOCHAR函数将一行标志码(ROWID)转换成一字符串。

  1. /*数据结构:角色档案(角色编码,角色,角色分类编码) 
  2. 功  能:取出指定字段(角色分类编码)为关键字的无重复数据,重复的取第一条 
  3. 说  明:重复记录取最后一条,只需要把min改成max即可 
  4. */ 
  5. select * from 角色档案 t where 角色编码 in (select min(角色编码)  from 角色档案 t1 group by t1.角色分类编码)

二、删除重复记录

数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置,本例举出删除它的办法。

方法1:

  1. declare @max integer,@id integer 
  2. declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1 
  3. open cur_rows 
  4. fetch cur_rows into @id,@max 
  5. while @@fetch_status=0 
  6. begin 
  7. select @max = @max -1 
  8. set rowcount @max 
  9. delete from 表名 where 主字段 = @id 
  10. fetch cur_rows into @id,@max 
  11. end 
  12. close cur_rows 
  13. set rowcount 0

方法2:

有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

  1. select distinct * from tablename

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

  1. select distinct * into #tmp from tablename 
  2. drop table tablename 
  3. select * into tablename from #tmp 
  4. drop table #tmp 

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

假设有重复的字段为name,address,要求得到这两个字段唯一的结果集

  1. select identity(int,1,1) as autoid, * into #tmp from tablename 
  2. select min(autoid) as autoid into #tmp2 from #tmp group by name,autoid 
  3. select * from #tmp where autoid in(select autoid from #tmp2) 

最后一个select即得到了name,address不重复的结果集(但多了一个autoid字段,实际写时可以写在select子句中省去此列)。原文:http://www.chinaitpower.com/2006aug/2006-08-23/212751.html

三、导入导出语句大全:

  1.  
  2. select * from opendatasource( ’microsoft.jet.oledb.4.0’,  
  3. ’data source="c:\test.xls";user id=admin;password=;extended properties=excel 5.0’)...xactions   
  4. /*动态文件名   
  5. declare @fn varchar(20),@s varchar(1000)  
  6. set @fn = ’c:\test.xls’  
  7. set @s =’’’microsoft.jet.oledb.4.0’’,   
  8. ’’data source="’+@fn+’";user id=admin;password=;extended properties=excel 5.0’’’   
  9. set @s = ’select * from opendatasource (’+@s+’)...sheet1$’   
  10. exec(@s)   
  11. */   
  12. select cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+’ ’ 转换后的别名   
  13. from opendatasource( ’microsoft.jet.oledb.4.0’,   
  14. ’data source="c:\test.xls";user id=admin;password=;extended properties=excel 5.0’)...xactions  
  15. /********************** excel导到远程sql   
  16. insert opendatasource(   
  17. ’sqloledb’,  
  18. ’data source=远程ip;user id=sa;password=密码’  
  19. ).库名.dbo.表名 (列名1,列名2)   
  20. select 列名1,列名2   
  21. from opendatasource( ’microsoft.jet.oledb.4.0’,   
  22. ’data source="c:\test.xls";user id=admin;password=;extended properties=excel 5.0’)...xactions  
  23.  
  24. /** 导入文本文件   
  25. exec master..xp_cmdshell ’bcp dbname..tablename in c:\dt.txt -c -sservername -usa -ppassword’  
  26. /** 导出文本文件  
  27. exec master..xp_cmdshell ’bcp dbname..tablename out c:\dt.txt -c -sservername -usa -ppassword’  
  28. 或 
  29. exec master..xp_cmdshell ’bcp "select * from dbname..tablename" queryout c:\dt.txt -c -sservername -usa -ppassword’  
  30. 导出到txt文本,用逗号分开   
  31. exec master..xp_cmdshell ’bcp "库名..表名" out "d:\tt.txt" -c -t ,-u sa -p password’   
  32.  
  33. bulk insert 库名..表名   
  34. from ’c:\test.txt’  
  35. with (  
  36. fieldterminator = ’;’,   
  37. rowterminator = ’\n’   
  38. )   
  39.  
  40. --/* dbase iv文件   
  41. select * from    
  42. openrowset(’microsoft.jet.oledb.4.0’   
  43. ,’dbase iv;hdr=no;imex=2;database=c:\’,’select * from [客户资料4.dbf]’)   
  44. --*/   
  45. --/* dbase iii文件   
  46. select * from    
  47. openrowset(’microsoft.jet.oledb.4.0’   
  48. ,’dbase iii;hdr=no;imex=2;database=c:\’,’select * from [客户资料3.dbf]’)   
  49. --*/   
  50. --/* foxpro 数据库   
  51. select * from openrowset(’msdasql’,   
  52. ’driver=microsoft visual foxpro driver;sourcetype=dbf;sourcedb=c:\’,   
  53. ’select * from [aa.dbf]’)   
  54. --*/   
  55. /**************导入dbf文件****************/   
  56. select * from openrowset(’msdasql’,   
  57. ’driver=microsoft visual foxpro driver;   
  58. sourcedb=e:\vfp98\data;   
  59. sourcetype=dbf’,   
  60. ’select * from customer where country != "usa" order by country’)   
  61. go   
  62. /***************** 导出到dbf ***************/   
  63. 如果要导出数据到已经生成结构(即现存的)foxpro表中,可以直接用下面的sql语句   
  64. insert into openrowset(’msdasql’,   
  65. ’driver=microsoft visual foxpro driver;sourcetype=dbf;sourcedb=c:\’,   
  66. ’select * from [aa.dbf]’)   
  67. select * from 表   
  68. 说明:   
  69. sourcedb=c:\ 指定foxpro表所在的文件夹   
  70. aa.dbf 指定foxpro表的文件名.   
  71.  
  72. /*************导出到access********************/   
  73. insert into openrowset(’microsoft.jet.oledb.4.0’,    
  74. ’x:\a.mdb’;’admin’;’’,a表) select * from 数据库名..b表   
  75. /*************导入access********************/   
  76. insert into b表 selet * from openrowset(’microsoft.jet.oledb.4.0’,    
  77. ’x:\a.mdb’;’admin’;’’,a表)   
  78. /*文件名为参数*/ 
  79. declare @fname varchar(20)   
  80. set @fname = ’d:\test.mdb’   
  81. exec(’select a.* from opendatasource(’’microsoft.jet.oledb.4.0’’,   
  82. ’’’+@fname+’’’;’’admin’’;’’’’, topics) as a ’)   
  83. select *    
  84. from opendatasource( ’microsoft.jet.oledb.4.0’,   
  85. ’data source="f:\northwind.mdb";jet oledb:database password=123;user id=admin;password=;’) -产品   
  86. /********************** 导入 xml 文件********************/ 
  87. declare @idoc int  
     
  88. declare @doc varchar(1000)  
     
  89. --sample xml document  
     
  90. set @doc =’  
     
  91. <root>  
     
  92. <customer cid= "c1" name="janine" city="issaquah">  
     
  93. <order oid="o1" date="1/20/1996" amount="3.5" />  
     
  94. <order oid="o2" date="4/30/1997" amount="13.4">customer was very satisfied  
     
  95. </order>  
     
  96. </customer>  
     
  97. <customer cid="c2" name="ursula" city="oelde" >  
     
  98. <order oid="o3" date="7/14/1999" amount="100" note="wrap it blue   
     
  99. white red">  
     
  100. <urgency>important</urgency>  
     
  101. happy customer.  
     
  102. </order>  
     
  103. <order oid="o4" date="1/20/1996" amount="10000"/>  
     
  104. </customer>  
     
  105. </root>  
     
  106. ’  
     
  107. -- create an internal representation of the xml document.  
     
  108. exec sp_xml_preparedocument @idoc output, @doc  
     
  109. -- execute a select statement using openxml rowset provider.  
     
  110. select *  
     
  111. from openxml (@idoc, ’/root/customer/order’, 1)  
     
  112. with (oid char(5),   
     
  113. amount float,   
     
  114. comment ntext ’text()’)  
     
  115. exec sp_xml_removedocument @idoc  
     

  116.  
  117. /**********************excel导到txt****************************************/  
     
  118. '想用  
     
  119. select * into opendatasource(...) from opendatasource(...)  
     
  120. /*实现将一个excel文件内容导入到一个文本文件  
     
  121. 假设excel中有两列,第一列为姓名,第二列为很行帐号(16位)  
     
  122. 且银行帐号导出到文本文件后分两部分,前8位和后8位分开。  */
     

  123.  
  124. /*邹健:  
     
  125. 如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2  然后就可以用下面的语句进行插入  
     
  126. 注意文件名和目录根据你的实际情况进行修改.  */
     
  127. insert into  
     
  128. opendatasource(’microsoft.jet.oledb.4.0’  
     
  129. ,’text;hdr=yes;database=c:\’  
     
  130. )...[aa#txt]  
     
  131. --,aa#txt)  
     
  132. --*/  
     
  133. select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)   
     
  134. from   
     
  135. opendatasource(’microsoft.jet.oledb.4.0’  
     
  136. ,’excel 5.0;hdr=yes;imex=2;database=c:\a.xls’  
     
  137. --,sheet1$)  
     
  138. )...[sheet1$]  
     

  139.  
  140. 如果你想直接插入并生成文本文件,就要用bcp  
     
  141. declare @sql varchar(8000),@tbname varchar(50)  
     
  142. --首先将excel表内容导入到一个全局临时表  
     
  143. select @tbname=’[##temp’+cast(newid() as varchar(40))+’]’  
     
  144. ,@sql=’select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)   
     
  145. into ’+@tbname+’ from   
     
  146. opendatasource(’’microsoft.jet.oledb.4.0’’  
     
  147. ,’’excel 5.0;hdr=yes;imex=2;database=c:\a.xls’’  
     
  148. )...[sheet1$]’  
     
  149. exec(@sql)  
     
  150. --然后用bcp从全局临时表导出到文本文件  
     
  151. set @sql=’bcp "’+@tbname+’" out "c:\aa.txt" /s"(local)" /p"" /c’  
     
  152. exec master..xp_cmdshell @sql  
     
  153. --删除临时表  
     
  154. exec(’drop table ’+@tbname)  
     

  155.  
  156. /********************导整个数据库*********************************************/  
     
  157. /*用bcp实现的存储过程  */
     

  158.  
  159. /*  
     
  160. 实现数据导入/导出的存储过程  
     
  161. 根据不同的参数,可以实现导入/导出整个数据库/单个表  
     
  162. 调用示例:  
     
  163. --导出调用示例  
     
  164. ----导出单个表  
     
  165. exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:\zj.txt’,1  
     
  166. ----导出整个数据库  
     
  167. exec file2table ’zj’,’’,’’,’xzkh_sa’,’c:\docman’,1  
     
  168. --导入调用示例  
     
  169. ----导入单个表  
     
  170. exec file2table ’zj’,’’,’’,’xzkh_sa..地区资料’,’c:\zj.txt’,0  
     
  171. ----导入整个数据库  
     
  172. exec file2table ’zj’,’’,’’,’xzkh_sa’,’c:\docman’,0  
     
  173. */  
     
  174. if exists(select 1 from sysobjects where name=’file2table’ and objectproperty(id,’isprocedure’)=1)  
     
  175. drop procedure file2table  
     
  176. go  
     
  177. create procedure file2table  
     
  178. @servername varchar(200) --服务器名  
     
  179. ,@username varchar(200) --用户名,如果用nt验证方式,则为空’’  
     
  180. ,@password varchar(200) --密码  
     
  181. ,@tbname varchar(500) --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表  
     
  182. ,@filename varchar(1000) --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这参数是文件存放路径,文件名自动用表名.txt  
     
  183. ,@isout bit --1为导出,0为导入  
     
  184. as  
     
  185. declare @sql varchar(8000)  
     
  186. if @tbname like ’%.%.%’ --如果指定了表名,则直接导出单个表  
     
  187. begin  
     
  188. set @sql=’bcp ’+@tbname  
     
  189. +case when @isout=1 then ’ out ’ else ’ in ’ end  
     
  190. +’ "’+@filename+’" /w’  
     
  191. +’ /s ’+@servername  
     
  192. +case when isnull(@username,’’)=’’ then ’’ else ’ /u ’+@username end  
     
  193. +’ /p ’+isnull(@password,’’)  
     
  194. exec master..xp_cmdshell @sql
     
  195. end  
     
  196. else  
     
  197. begin --导出整个数据库,定义游标,取出所有的用户表  
     
  198. declare @m_tbname varchar(250)  
     
  199. if right(@filename,1)<>’\’ set @filename=@filename+’\’  
     
  200. set @m_tbname=’declare #tb cursor for select name from ’+@tbname+’..sysobjects where xtype=’’u’’’  
     
  201. exec(@m_tbname)  
     
  202. open #tb  
     
  203. fetch next from #tb into @m_tbname  
     
  204. while @@fetch_status=0  
     
  205. begin  
     
  206. set @sql=’bcp ’+@tbname+’..’+@m_tbname  
     
  207. +case when @isout=1 then ’ out ’ else ’ in ’ end  
     
  208. +’ "’+@filename+@m_tbname+’.txt " /w’  
     
  209. +’ /s ’+@servername  
     
  210. +case when isnull(@username,’’)=’’ then ’’ else ’ /u ’+@username end  
     
  211. +’ /p ’+isnull(@password,’’)  
     
  212. exec master..xp_cmdshell @sql  
     
  213. fetch next from #tb into @m_tbname  
     
  214. end  
     
  215. close #tb  
     
  216. deallocate #tb   
     
  217. end  
     
  218. go  
     

  219.  
  220. /************* oracle **************/  
     
  221. exec sp_addlinkedserver ’oraclesvr’,   
     
  222. ’oracle 7.3’,   
     
  223. ’msdaora’,   
     
  224. ’orcldb’  
     
  225. go  
     
  226. delete from openquery(mailser,’select * from yulin’)  
     
  227. select * from openquery(mailser,’select * from yulin’)  
     
  228. update openquery(mailser,’select * from yulin where id=15’)set disorder=555,catago=888  
     
  229. insert into openquery(mailser,’select disorder,catago from yulin’)values(333,777)   
  230. /*----------------------------------------- 
  231. 补充:   
  232. 对于用bcp导出,是没有字段名的.  
  233. 用openrowset导出,需要事先建好表.   
  234. 用openrowset导入,除access及excel外,均不支持非本机数据导 
  235. -----------------------------------------*/ 
     

---------------------------------第二部份、入门与进阶------------------------------------------

一、基础

1、说明:创建数据库
create database database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
use master
exec sp_addumpdevice 'disk', 'testback', 'c:\mssql7backup\mynwind_1.dat'
--- 开始 备份
backup database pubs to testback
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
a:create table tab_new like tab_old (使用旧表创建新表)
b:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表
drop table tabname
6、说明:增加一个列
alter table tabname add column col type
注:列增加后将不能删除。db2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: alter table tabname add primary key(col)
说明:删除主键: alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
a: union 运算符
union 运算符通过组合其他两个结果表(例如 table1 和 table2)并消去表中任何重复行而派生出一个结果表。当 all 随 union 一起使用时(即 union all),不消除重复行。两种情况下,派生表的每一行不是来自 table1 就是来自 table2。
b: except 运算符
except 运算符通过包括所有在 table1 中但不在 table2 中的行并消除所有重复行而派生出一个结果表。当 all 随 except 一起使用时 (except all),不消除重复行。
c: intersect 运算符
intersect 运算符通过只包括 table1 和 table2 中都有的行并消除所有重复行而派生出一个结果表。当 all 随 intersect 一起使用时 (intersect all),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
a、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
sql: select a.a, a.b, a.c, b.c, b.d, b.f from a left out join b on a.a = b.c
b:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
c:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。


 

二、提升


 

1、说明:复制表(只复制结构,源表名:a 新表名:b) (access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (access可用)
insert into b(a, b, c) select d,e,f from b;
3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
例子:..from b in '"&server.mappath(".")&"\data.mdb" &"' where..
4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a in (select d from b ) 或者: select a,b,c from a where a in (1,2,3)
5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a left out join b on a.a = b.c
7、说明:在线视图查询(表名1:a )
select * from (select a,b,c from a) t where t.a > 1;
8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 数值1 and 数值2
9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)
10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、说明:四表联查问题:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、说明:日程安排提前五分钟提醒
sql: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5
13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段
14、说明:前10条记录
select top 10 * form table1 where 范围
15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、说明:包括所有在 tablea 中但不在 tableb和tablec 中的行并消除所有重复行而派生出一个结果表
(select a from tablea ) except (select a from tableb) except (select a from tablec)
17、说明:随机取出10条数据
select top 10 * from tablename order by newid()
18、说明:随机选择记录
select newid()
19、说明:删除重复记录
delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、说明:列出数据库里所有的表名
select name from sysobjects where type='u'
21、说明:列出表里的所有的
select name from syscolumns where id=object_id('tablename')
22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when 'a' then pcs else 0 end),sum(case vender when 'c' then pcs else 0 end),sum(case vender when 'b' then pcs else 0 end) from tablename group by type
显示结果:
type vender pcs
电脑 a 1
电脑 a 1
光盘 b 2
光盘 a 2
手机 b 3
手机 c 3
23、说明:初始化表table1
truncate table table1
24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

三、技巧

1、1=1,1=2的使用,在sql语句组合时用的较多

“where 1=1” 是表示选择全部 “where 1=2”全部不选,
如:
if @strwhere !=''
begin
set @strsql = 'select count(*) as total from [' + @tblname + '] where ' +@strwhere
end
else
begin
set @strsql = 'select count(*) as total from [' + @tblname + ']'
end 

我们直接写成
set @strsql = 'select count(*) as total from [' + @tblname + '] where 1=1 安定 '+@strwhere

2、收缩数据库
--重建索引
dbcc reindex
dbcc indexdefrag
--收缩数据和日志
dbcc shrinkdb
dbcc shrinkfile

3、压缩数据库
dbcc shrinkdatabase(dbname)

4、转移数据库给新用户以已存在用户权限
exec sp_change_users_login 'update_one','newname','oldname'
go
5、检查备份集
restore verifyonly from disk='e:\dvbbs.bak'
6、修复数据库
alter database [dvbbs] set single_user
go
dbcc checkdb('dvbbs',repair_allow_data_loss) with tablock
go
alter database [dvbbs] set multi_user
go


 

7、日志清除
set nocount on
declare @logicalfilename sysname,
@maxminutes int,
@newsize int

use tablename -- 要操作的数据库名
select @logicalfilename = 'tablename_log', -- 日志文件名
@maxminutes = 10, -- limit on time allowed to wrap log.
@newsize = 1 -- 你想设定的日志文件的大小(m)
-- setup / initialize
declare @originalsize int
select @originalsize = size
from sysfiles
where name = @logicalfilename
select 'original size of ' + db_name() + ' log is ' +
convert(varchar(30),@originalsize) + ' 8k pages or ' +
convert(varchar(30),(@originalsize*8/1024)) + 'mb'
from sysfiles
where name = @logicalfilename
create table dummytrans
(dummycolumn char (8000) not null)

declare @counter int,
@starttime datetime,
@trunclog varchar(255)
select @starttime = getdate(),
@trunclog = 'backup log ' + db_name() + ' with truncate_only'
dbcc shrinkfile (@logicalfilename, @newsize)
exec (@trunclog)
-- wrap the log if necessary.
while @maxminutes > datediff (mi, @starttime, getdate()) -- time has not expired
and @originalsize = (select size from sysfiles where name = @logicalfilename)
and (@originalsize * 8 /1024) > @newsize
begin -- outer loop.
select @counter = 0
while ((@counter < @originalsize / 16) and (@counter < 50000))
begin -- update
insert dummytrans values ('fill log')
delete dummytrans
select @counter = @counter + 1
end
exec (@trunclog)
end
select 'final size of ' + db_name() + ' log is ' +
convert(varchar(30),size) + ' 8k pages or ' +
convert(varchar(30),(size*8/1024)) + 'mb'
from sysfiles
where name = @logicalfilename
drop table dummytrans
set nocount off

8、说明:更改某个表
exec sp_changeobjectowner 'tablename','dbo'

9、存储更改全部表

create procedure dbo.user_changeobjectownerbatch
@oldowner as nvarchar(128),
@newowner as nvarchar(128)
as
declare @name as nvarchar(128)
declare @owner as nvarchar(128)
declare @ownername as nvarchar(128)
declare curobject cursor for
select 'name' = name,
'owner' = user_name(uid)
from sysobjects
where user_name(uid)=@oldowner
order by name
open curobject
fetch next from curobject into @name, @owner
while(@@fetch_status=0)
begin
if @owner=@oldowner
begin
set @ownername = @oldowner + '.' + rtrim(@name)
exec sp_changeobjectowner @ownername, @newowner
end
-- select @name,@newowner,@oldowner
fetch next from curobject into @name, @owner
end
close curobject
deallocate curobject
go

10、sql server中直接循环写入数据
declare @i int
set @i=1
while @i<30
begin
insert