代码改变世界

sql常用

2012-06-07 16:36  omgee  阅读(240)  评论(0编辑  收藏  举报

table1

a   b  c

------------

1   2  3

4   5  6

7   8  9

 

table2

-----------

d  e  f

1  2  3

10 11 12

13 14 15

 

union

select * from table1 union select * from table2   合并两表,去除重复行

a   b   c

-------------

4  5  6

7  8  9

10 11 12

13 14 15    

union all

select * from table1 union all select * from table2 合并两表,显示所有内容

a  b  c

--------------

1  2  3

4  5  6

7  8  9

1  2  3

10 11 12

13 14  15

 

except

select * from table1 except select * from table2  去除table1中table2的内容

a  b  c

------------

4  5  6

7  8  9

intersect

select * from table1 intersect select * from table2  查询出table1与table2的重复字段

a  b  c

1  2  3

 

 

2. System.Data.SqlClient.SqlError: 备份集中的数据库备份与现有的 'XXX' 数据库不同

论sql 2000,sql 2005 ,sql2008备份文件还原

2000

1、在目标数据库服务器中,打开Sql  Server  2000的企业管理器,并新建与原库同名的数据库;
2、右键选择新建的数据库,找到并选择还原数据库,再随后的窗口中选择从设备;
3、添加Sql  Server 2000的数据库备份文件并勾选覆盖原有数据库,点击确定,还原成功!

2005

若要用Sql Server 2000成功还原到Sql Server  2005中并不能按照在Sql Server  2000中的还原步骤来还原,即不能新建与原库同名的数据库,正确的还原方法如下叙述:
1、删除上述操作中新建的数据库或还原时要起的数据库名称相同的数据库名称,结合上图如删除已存在的'CN17006_db'数据库;
2、右击“数据库”选择“还原数据库”;

3、直接还原,可以取跟原数据库名不同的名字

由上述内容不难看出来,使用Sql Server  2000的数据库备份文件还原Sql Server 2000的数据库和还原Sql Server 2005的数据库时,其关键所在就是在Sql  2000时是必须新建数据库并对其还原,而在Sql 2005时是必须不能新建数据库才能对其还原。另外一个区别就是Sql  2000时是要新建的数据库名称与原库名称相同,而Sql 2005时输入的数据库名称可以是任意的一个名称,不必与原库名称相同。

 

3. SQL Server版本:2008  某个数据库,在SQL Server 2008 r2 下创建 尝试将备份还原的别的机子上,均报如下错误:
 

报错如图,38(已到文件结尾) (Microsoft SQL Server,错误:3203)   尝试了多次和多种登记连接方式都没有是这样的错误.经过查询资料,发现可以用Dos命令还原数据库,经过尝试成功了.操作步骤如下:   输入Cmd进入Dos界面,   然后输入SqlCmd   再输入:restore database EMR4 from disk='D:\Data\emr4_backup_2012_10_18_000001_5044221.bak' with replace, move 'emr4' To 'D:\data\Emr4.mdf',move 'emr4_log' to 'D:\data\emr4_log.ldf'回车,   最后输入:Go 回车

    1. 从 cmd 进入 sqlcmd .

       2. 输入 以下语句,再输入 go 即可执行:

   RESTORE DATABASE 还原后的数据库名 FROM DISK = 'D:\yjdb\pms_yj_20110722.bak(备份文件)' WITH REPLACE , MOVE 'pms_yujia(曾经的mdf逻辑名)' TO 'D:\yjdb\pms_yujia.mdf(mdf还原后的路径)', MOVE 'pms_yujia_log(曾经的ldf逻辑名)' TO 'D:\yjdb\pms_yujia_log.ldf(ldf还原后的路径)'

 

 

从客户服务器上备份的数据库在本地还原时报错:在xxxx.bak上读取失败:38(已到文件结尾。)(Microsoft SQL Server,错误:303)。

在网上找了方法是在开始、运行 cmd  ,再用osql -S local -U sa -P youPassword  进入sqcmd管理;

用restore  filelistonly  from  disk='C:\dbname.bak' with file=2 回车 go 回车 进行查看文件逻辑名称,

显示的两个logicalName 是用来还原的。

还原:restore database databaseName from disk='c:\dbname.bak' with replace, move 'mdf逻辑文件名称' to  'c:\数据库名称.mdf', move 'ldf日志文件逻辑名称' to  'c:\数据库名称.ldf'  回车 go 回车

 

就还原好了。

 

 

因为是在另一台电脑对同名数据库做的备份,用常规方法还原,提示不是相同数据库,不让还原,在网上找到下面的方法解决了:---无法还原的情况都可以这样尝试

一、右击系统数据库master,新建查询

执行以下SQL代码:

RESTORE DATABASE xxx
FROM DISK = 'E:\DB\xxx.bak'   --bak文件路径
with replace,
MOVE 'xxx' TO 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\xxx.mdf',   --mdf文件路径
MOVE 'xxx_log' TO 'D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\xxx.ldf'   --ldf文件路径

注释:xxx是你需要还原的数据库名称,xxx.bak是你需要还原的备份文件。

二、上面方法执行成功后,只有部分的表结构已经还原,而且表中没有数据,这时就可以用系统默认的方法再用xxx.bak文件还原一次数据库就大功告成了,必须要选中覆盖还原哦。

 

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2012-10/72620.htm