NetWinForm程序园
您的位置: 首页 > 文章列表 > sql语句大全
sql语句大全
分类: Oracle SqlServer MySql 发布:2010-9-5 5:37:45 阅读:60次 评论:0人评论
--语 句 功 能
--
数据操作
SELECT --从数据库表中检索数据行和列
INSERT --向数据库表添加新数据行
DELETE --从数据库表中删除数据行
UPDATE --更新数据库表中的数据
--
数据定义
CREATE TABLE --创建一个数据库表
DROP TABLE --从数据库中删除表
ALTER TABLE --修改数据库表结构
CREATE VIEW --创建一个视图
DROP VIEW --从数据库中删除视图
CREATE INDEX --为数据库表创建一个索引
DROP INDEX --从数据库中删除索引
CREATE PROCEDURE --创建一个存储过程

 


DROP PROCEDURE --从数据库中删除存储过程
CREATE TRIGGER --创建一个触发器
DROP TRIGGER --从数据库中删除触发器
CREATE SCHEMA --向数据库添加一个新模式
DROP SCHEMA --从数据库中删除一个模式
CREATE DOMAIN --创建一个数据值域
ALTER DOMAIN --改变域定义
DROP DOMAIN --从数据库中删除一个域
--
数据控制
GRANT --授予用户访问权限
DENY --拒绝用户访问
REVOKE --解除用户访问权限
--
事务控制
COMMIT --结束当前事务
ROLLBACK --中止当前事务
SET TRANSACTION --定义当前事务数据访问特征
--
程序化SQL
DECLARE --为查询设定游标
EXPLAN --为查询描述数据访问计划
OPEN --检索查询结果打开一个游标
FETCH --检索一行查询结果
CLOSE --关闭游标
PREPARE --为动态执行准备SQL 语句
EXECUTE --动态地执行SQL 语句
DESCRIBE --描述准备好的查询 
--
-局部变量
declare @id char(10)
--set @id = '10010001'
select @id = '10010001' 

---全局变量
--
-必须以@@开头

--IF ELSE
declare @x int @y int @z int
select @x = 1 @y = 2 @z=3
if @x > @y
print 'x > y' --打印字符串'x > y'
else if @y > @z
print 'y > z'
else print 'z > y'

--CASE
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end

--WHILE CONTINUE BREAK
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的值
while @y < 3
begin
select @c = 100*@x + @y
print @c --打印变量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end

--WAITFOR
--
例 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay ’01:02:03
select * from employee
--例 等到晚上11 点零8 分后才执行SELECT 语句
waitfor time ’23:08:00
select * from employee

***SELECT***

select *(列名) from table_name(表名) where column_name operator value
ex:(宿主)
select * from stock_information where stockid = str(nid)
stockname 
= 'str_name' 
stockname 
like '% find this %' 
stockname 
like '[a-zA-Z]%' --------- ([]指定值的范围)
stockname like '[^F-M]%' --------- (^排除指定范围)
--
------- 只能在使用like关键字的where子句中使用通配符)
or stockpath = 'stock_path'
or stocknumber < 1000
and stockindex = 24
not stock*** = 'man'
stocknumber 
between 20 and 100
stocknumber 
in(10,20,30)
order by stockid desc(asc--------- 排序,desc-降序,asc-升序
order by 1,2 --------- by列号
stockname = (select stockname from stock_information where stockid = 4)
--------- 子查询
--
------- 除非能确保内层select只返回一个行的值,
--
------- 否则应在外层where子句中用一个in限定符
select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复
select stocknumber ,"stocknumber + 10= stocknumber + 10 from table_name
select stockname , "stocknumber" = count(*from table_name group by stockname
--------- group by 将表按行分组,指定列中有相同的值
having count(*= 2 --------- having选定指定的组

select * 
from table1, table2 
where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
table1.id =* table2.id -------- 右外部连接 

select stockname from table1
union [all] ----- union合并查询结果集,all-保留重复行
select stockname from table2

***insert***

insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")
value (
select Stockname , Stocknumber from Stock_table2)---value为select语句

***update***

update table_name set Stockname = "xxx" [where Stockid = 3]
Stockname 
= default
Stockname 
= null
Stocknumber 
= Stockname + 4

***delete***

delete from table_name where Stockid = 3
truncate table_name ----------- 删除表中所有行,仍保持表的完整性
drop table table_name --------------- 完全删除表

***alter table*** --- 修改数据库表结构

alter table database.owner.table_name add column_name char(2null .....
sp_help table_name 
---- 显示表已有特征
create table table_name (name char(20), age smallint, lname varchar(30))
insert into table_name select ......... ----- 实现删除列的方法(创建新表)
alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束

***function(/*常用函数*/)***

----统计函数----
AVG --求平均值
COUNT --统计数目
MAX --求最大值
MIN --求最小值
SUM --求和

--AVG
use pangu
select avg(e_wage) as dept_avgWage
from employee
group by dept_id


--MAX
--
比如求工资最高的员工姓名
use pangu
select e_name
from employee
where e_wage =
(
select max(e_wage)
from employee)

--STDEV()
--
STDEV()函数返回表达式中所有数据的标准差


--STDEVP()
--
STDEVP()函数返回总体标准差

--VAR()
--
VAR()函数返回表达式中所有值的统计变异数

--VARP()
--
VARP()函数返回总体变异数

----算术函数----

/***三角函数***/
SIN(float_expression) --返回以弧度表示的角的正弦
COS(float_expression) --返回以弧度表示的角的余弦
TAN(float_expression) --返回以弧度表示的角的正切
COT(float_expression) --返回以弧度表示的角的余切
/*
**反三角函数***/
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角
ATAN2(float_expression1,float_expression2) 
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角
DEGREES(numeric_expression)
--把弧度转换为角度返回与表达式相同的数据类型可为
--
INTEGER/MONEY/REAL/FLOAT 类型
RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为
--
INTEGER/MONEY/REAL/FLOAT 类型
EXP(float_expression) --返回表达式的指数值
LOG(float_expression) --返回表达式的自然对数值
LOG10(float_expression)--返回表达式的以10 为底的对数值
SQRT(float_expression) --返回表达式的平方根
/*
**取近似值函数***/
CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为
--
INTEGER/MONEY/REAL/FLOAT 类型
FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为
--
INTEGER/MONEY/REAL/FLOAT 类型
ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据
--
类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为
--
INTEGER/MONEY/REAL/FLOAT 类型
SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
--
与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
PI() --返回值为π 即3.1415926535897936
RAND([integer_expression]--用任选的[integer_expression]做种子值得出0-1 间的随机浮点数

----字符串函数----
ASCII() --函数返回字符表达式最左端字符的ASCII 码值
CHAR() --函数用于将ASCII 码转换为字符
--
如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值
LOWER() --函数把字符串全部转换为小写
UPPER() --函数把字符串全部转换为大写
STR() --函数把数值型数据转换为字符型数据
LTRIM() --函数把字符串头部的空格去掉
RTRIM() --函数把字符串尾部的空格去掉
LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串
CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置
SOUNDEX() --函数返回一个四位字符码 
--
SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值 
DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异
--
0 两个SOUNDEX 函数返回值的第一个字符不同
--
1 两个SOUNDEX 函数返回值的第一个字符相同
--
2 两个SOUNDEX 函数返回值的第一二个字符相同
--
3 两个SOUNDEX 函数返回值的第一二三个字符相同
--
4 两个SOUNDEX 函数返回值完全相同

QUOTENAME() --函数返回被特定字符括起来的字符串
/*
select quotename('abc', '{') quotename('abc')
运行结果如下:
----------------------------------
{abc} [abc]
*/


REPLICATE() --函数返回一个重复character_expression 指定次数的字符串
/*
select replicate('abc', 3) replicate( 'abc', -2)
运行结果如下:
----------- -----------
abcabcabc NULL


REVERSE() --函数将指定的字符串的字符排列顺序颠倒
REPLACE() --函数返回被替换了指定子串的字符串
/*select replace('abc123g', '123', 'def')
运行结果如下:
----------- -----------
abcdefg
*/


SPACE() --函数返回一个有指定长度的空白字符串
STUFF() --函数用另一子串替换字符串指定位置长度的子串


----数据类型转换函数----
CAST() 函数语法如下
CAST() (<expression> AS <data_ type>[ length ])
CONVERT() 函数语法如下
CONVERT() (<data_ type>[ length ]<expression> [, style])

select cast(100+99 as charconvert(varchar(12), getdate())
运行结果如下
------------------------------ ------------
199 Jan 15 2000

----日期函数----
DAY() --函数返回date_expression 中的日期值
MONTH() --函数返回date_expression 中的月份值
YEAR() --函数返回date_expression 中的年份值
DATEADD(<datepart> ,<number> ,<date>
--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期
DATEDIFF(<datepart> ,<number> ,<date>)
--函数返回两个指定日期在datepart 方面的不同之处
DATENAME(<datepart> , <date>--函数以字符串的形式返回日期的指定部分
DATEPART(<datepart> , <date>--函数以整数值的形式返回日期的指定部分
GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间


----系统函数----
APP_NAME() --函数返回当前执行的应用程序的名称
COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值
COL_LENGTH(<'table_name'><'column_name'>--函数返回表中指定字段的长度值
COL_NAME(<table_id><column_id>--函数返回表中指定字段的名称即列名
DATALENGTH() --函数返回数据表达式的数据的实际长度
DB_ID(['database_name']--函数返回数据库的编号
DB_NAME(database_id) --函数返回数据库的名称
HOST_ID() --函数返回服务器端计算机的名称
HOST_NAME() --函数返回服务器端计算机的名称
IDENTITY(<data_type>[, seed increment][AS column_name])
--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中
/*
select identity(int, 1, 1) as column_name
into newtable
from oldtable
*/
ISDATE() --函数判断所给定的表达式是否为合理日期
ISNULL(<check_expression><replacement_value>--函数将表达式中的NULL 值用指定值替换
ISNUMERIC() --函数判断所给定的表达式是否为合理的数值
NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值
NULLIF(<expression1><expression2>)
--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值

sql中的保留字

action 
add aggregate all 
alter after and as 
asc avg avg_row_length auto_increment 
between bigint bit binary 
blob bool both 
by 
cascade case char character 
change 
check checksum column 
columns comment 
constraint create 
cross current_date current_time current_timestamp 
data 
database databases date 
datetime day day_hour day_minute 
day_second dayofmonth dayofweek dayofyear 
dec decimal default delayed 
delay_key_write 
delete desc describe 
distinct distinctrow double drop 
end else escape escaped 
enclosed enum explain 
exists 
fields 
file first float 
float4 float8 flush 
foreign 
from for full function 
global 
grant grants group 
having heap high_priority hour 
hour_minute hour_second hosts identified 
ignore 
in index infile 
inner insert insert_id int 
integer interval int1 int2 
int3 int4 int8 
into 
if is isam join 
key keys kill last_insert_id 
leading 
left length like 
lines limit 
load local 
lock logs 
long longblob 
longtext low_priority 
max max_rows 
match mediumblob mediumtext mediumint 
middleint min_rows minute minute_second 
modify 
month monthname myisam 
natural numeric no 
not 
null on optimize option 
optionally 
or order outer 
outfile pack_keys partial password 
precision primary procedure process 
processlist 
privileges read real 
references reload regexp rename 
replace restrict returns revoke 
rlike row rows second 
select set show shutdown 
smallint soname sql_big_tables sql_big_selects 
sql_low_priority_updates sql_log_off sql_log_update sql_select_limit 
sql_small_result sql_big_result sql_warnings straight_join 
starting status string 
table 
tables 
temporary terminated text 
then time timestamp tinyblob 
tinytext 
tinyint trailing to 
type 
use using unique 
unlock unsigned 
update usage 
values varchar variables varying 
varbinary with write when 
where year year_month zerofill

常用SQL命令和ASP编程
在进行数据库操作时,无非就是添加、删除、修改,这得设计到一些常用的SQL语句,如下: 
SQL常用命令使用方法:

(
1) 数据记录筛选:

sql
="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"

sql
="select * from 数据表 where 字段名 like %字段值% order by 字段名 [desc]"

sql
="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"

sql
="select * from 数据表 where 字段名 in (值1,值2,值3)"

sql
="select * from 数据表 where 字段名 between 值1 and 值2"

(
2) 更新数据记录:

sql
="update 数据表 set 字段名=字段值 where 条件表达式"

sql
="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式"

(
3) 删除数据记录:

sql
="delete from 数据表 where 条件表达式"

sql
="delete from 数据表" (将数据表所有记录删除)

(
4) 添加数据记录:

sql
="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)"

sql
="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表)

(
5) 数据记录统计函数:

AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加

引用以上函数的方法:

sql
="select sum(字段名) as 别名 from 数据表 where 条件表达式"
set rs=conn.excute(sql)

用 rs("别名") 获取统的计值,其它函数运用同上。

(
6) 数据表的建立和删除:

CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )

例:
CREATE TABLE tab01(name varchar(50),datetime default now())

DROP TABLE 数据表名称 (永久性删除一个数据表)


在ASP编程时,下面这些语句是必须知道的:

1.连接数据库
a. ASP与Access数据库连接:
<%@ language=VBs cript%>
<%
dim conn,mdbfile
mdbfile
=server.mappath("数据库名称.mdb")
set conn=server.createobject("adodb.connection")
conn.
open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfile
%>

b. ASP与SQL数据库连接:

<%@ language=VBs cript%>
<%
dim conn
set conn=server.createobject("ADODB.connection")
con.
open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称
%>

建立记录集对象:

set rs=server.createobject("adodb.recordset")
rs.
open SQL语句,conn,3,2

2. 记录集对象的方法:

rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition
=N 将记录指针移到数据表第N行
rs.absolutepage
=N 将记录指针移到第N页的第一行
rs.pagesize
=N 设置每页为N条记录
rs.pagecount 根据 pagesize 的设置返回总页数
rs.recordcount 返回记录总数
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否
rs.
delete 删除当前记录,但记录指针不会向下移动
rs.addnew 添加记录到数据表末端
rs.
update 更新数据表记录

附:

常数 常数值 说明
--------------------------------
adLockReadOnly 
1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
adLockPrssimistic 
2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。
adLockOptimistic 
3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。
adLockBatchOptimistic 
4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作。


MSSQL经典语句 
 

1.按姓氏笔画排序:Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 

2.数据库加密:select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码'= 1--相同;否则不相同 encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码'= 1--相同;否则不相同

3.取回表中字段:declare @list varchar(1000),@sql nvarchar(1000
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select '+right(@list,len(@list)-1)+' from 表A' 
exec (@sql)

4.查看硬盘分区:EXEC master..xp_fixeddrives

5.比较A,B表是否相等:if (select checksum_agg(binary_checksum(*)) from A)
=
(
select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'

6.杀掉所有的事件探察器进程:DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'

7.记录搜索:开头到N条记录
Select Top N * From 表
-------------------------------
N到M条记录(要有主索引ID)Select Top M-* From 表 Where ID in (Select Top M ID From 表) Order by ID Desc
----------------------------------
N到结尾记录
Select Top N * From 表 Order by ID Desc

8.如何修改数据库的名称:sp_renamedb 'old_name''new_name' 

9:获取当前数据库中的所有用户表select Name from sysobjects where xtype='u' and status>=0

10:获取某一个表的所有字段select name from syscolumns where id=object_id('表名')

11:查看与某一个表相关的视图、存储过程、函数select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

12:查看当前数据库中所有存储过程select name as 存储过程名称 from sysobjects where xtype='P'

13:查询用户创建的所有数据库select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

14:查询某一个表的字段和数据类型select column_name,data_type from information_schema.columns
where table_name = '表名' 

[n].[标题]:Select * From TableName Order By CustomerName 

[n].[标题]:Select * From TableName Order By CustomerName 

from:http://tb.blog.csdn.net/TrackBack.aspx?PostId=585515

 

触发器
-MSSQL常用操作

 

不再新开文章.

这里只打算讲解四部分了,也就最简单、最常用的四部分。

1、触发器。

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
常见的触发器有三种:分别应用于Insert , 
Update , Delete 事件。(SQL Server 2000定义了新的触发器,这里不提)

我为什么要使用触发器?比如,这么两个表:

Create Table Student( --学生表
StudentID int primary key--学号
....
)

Create Table BorrowRecord( --学生借书记录表
BorrowRecord int identity(1,1), --流水号 
StudentID int , --学号
BorrowDate datetime--借出时间
ReturnDAte Datetime--归还时间
...
)

用到的功能有:
1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。
等等。

这时候可以用到触发器。对于1,创建一个Update触发器:

Create Trigger truStudent
On Student
for Update
As
if Update(StudentID)
begin

Update BorrowRecord 
Set StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i 
Where br.StudentID=d.StudentID

end 

理解触发器里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。
一个Update 的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。

对于2,创建一个Delete触发器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord 
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID

从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。
这里我们只讲解最简单的触发器。复杂的容后说明。
事实上,我不鼓励使用触发器。触发器的初始设计思想,已经被“级联”所替代.



 

MSSQL数据库导出和导入
 

SQL Server导出导入数据方法

 
 一、导出导入SQL Server里某个数据库 
 
1. 在SQL Server企业管理器里选中要转移的数据库,按鼠标右键,选所有任务->备份数据库。 
2. 备份 选数据库-完全, 目的 备份到 按添加按钮 文件名 在SQL Server服务器硬盘下输入一个自定义的备份数据库文件名(后缀一般是bak) 重写 选重写现有媒体 最后按确定按钮。 如果生成的备份数据库文件大于1M,要用压缩工具压缩后再到Internet上传输。 
3. 通过FTP或者remote desktop或者pcanywhere等方法 把第二步生成的备份数据库文件或者其压缩后的文件传到目的SQL Server数据库,如果有压缩要解压。 4.目的SQL Server数据库如果还没有此数据库,先创建一个新的数据库; 然后选中这个新创建的数据库,按鼠标右键,选所有任务->还原数据库 还原->从设备->选择设备->磁盘->添加(找到要导入的备份数据库文件名)->确定 还原备份集->数据库-完全 最后按确定按钮。完全的数据库导入成功了。 (如果在已经存在的SQL Server数据库上还原数据库可能遇到有还有其它人正在使用它而恢复操做失败, 可以去看 ->管理->当前活动->/对象->找到数据库下锁的进程号->到查询分析器里用kill 进程号杀掉这些锁, 然后再做还原) 
注意:
如果在原有的目的SQL Server数据库上从备份文件(
*.bak)还原数据库 会把已经存在的表、存储过程等数据库对:象全部替换成最近这次导入的备份数据库里的内容。 如果一定要还原备份文件(*.bak)里部分数据,需要另外建一个新数据库, 其逻辑名称和数量同备份文件(*.bak)里数据库的逻辑名称和数量一致; 新数据库的物理文件名称取得一定要和备份文件(*.bak)里数据库的物理文件不一样才行。 
 
二、导出导入SQL Server里某个表 
 
1. 没有防火墙,同一个局域网里或不在同一个局域网里,但通过Internet可以互相访问 在SQL Server企业管理器里选中目的数据库 ,按鼠标右键,选所有任务->导入数据-> 弹出数据转换服务导入/导出向导窗口->下一步-> 选数据源-> 数据源(用于SQL Server的Microfost OLE DB提供程序)-> 服务器(可选择局域网内能访问到的所有SQL Server服务器,或者直接输入IP地址)-> 选择使用windows身份验证还是使用SQL Serve身份验证(输入数据库的用户名和密码)-> 数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步-> 选择目的->目的(用于SQL Server的Microfost OLE DB提供程序)-> 服务器(默认为上一步里选中的导出服务器,也可以选其它局域网内能访问到的所有SQL Server服务器,或者直接输入IP地址)-> 目的数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步-> 制定表复制或查询->选从源数据库复制表和视图(也可以选择用一条查询指定要传输的数据)->下一步-> 选择源表和视图->在要导入的表和视图前面选中源->目的出现同样的表名(可以手工修改成别的表名)-> 转换->列映射和转换里面可以修改源表和目的表之间字段的对应关系,修改目的表字段的类型和长度等, 并可以选择创建目的表,在目的表中增加行,除去并重新创建目的表,启用标志插入等选项->确定->下一步-> 保存、调度和复制包->时间->立即运行(如果要实现隔一段时间自动导出导入数据,选调度DTS包以便以后执行)-> 保存(可以不选)->[ 保存DTS包(如果以后还要转移这批相同的数据,可以把本次导出导入的内容和步骤保存起来, 存到SQL Server即可,保存的时候要输入DTS的包名及详细描述)->下一步-> ]->完成 正在执行包->图形界面显示创建表及插入记录的步骤和状态->完成 
2. 经过防火墙,不在同一个局域网里 ①、导出表里的数据到文本文件: 在SQL Server企业管理器里选中目的数据库,按鼠标右键,选所有任务-> 导入数据->弹出数据转换服务导入/导出向导窗口->下一步-> 选数据源-> 数据源(用于SQL Server的Microfost OLE DB提供程序)-> 服务器(可选择局域网内能访问到的所有SQL Server服务器)-> 选择使用windows身份验证还是使用SQL Serve身份验证(输入数据库的用户名和密码)-> 数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步-> 选择目的->目的(文本文件)-> 文件名(在自己的电脑硬盘中生成一个自定义的文本文件) ->下一步-> 制定表复制或查询->选从源数据库复制表和视图(也可以选择用一条查询指定要传输的数据)->下一步-> 选择目的文件格式->源(选择要导出的表)->用默认的带分隔符->选第一行包含有列名称选项->下一步-> 保存、调度和复制包->时间->立即运行(如果要实现隔一段时间自动导出到文本文件,选调度DTS包以便以后执行)-> 保存(可以不选)-> [保存DTS包(保存的时候要输入DTS的包名及详细描述)->下一步->]->完成 正在执行包->图形界面显示表到文本文件的步骤和状态->完成 如果生成的文本文件大于1M,要用压缩工具压缩后再到Internet上传输。 ②、通过FTP或者remote desktop或者pcanywhere等方法把 第①步生成的文本文件或者其压缩后的文件传到目的SQL Server数据库,如果有压缩要解压。 ③、把文本文件导入目的SQL Server数据库 直接把文本文件导入目的SQL Server数据库里跟文本文件同名的新表名时,默认的会把所有字段类型都变成字符串。 所以我们要这样做: 在源SQL Server数据库上先生成创建表的sql语句 在SQL Server查询分析器里->选中源数据库里表名->按右键->在新窗口中编写对象脚本->创建-> 复制下新窗口内创建表名的sql语句 到目标SQL Server数据库上查询分析器里执行创建表名的sql语句,生成空表结构。 (如果已经存在这样的表名,修改建表的sql语句,在表名后面加上导入时间的年月信息,例如table_0113) 调用导入/导出工具->弹出数据转换服务导入/导出向导窗口->下一步-> 选数据源-> 数据源(文本文件)-> 文件名(已传到目的SQL Server数据库下要导入的文本文件,后缀可以不是*.txt, 但是常规文本编辑器能打开的文件,文件类型选全部)->下一步-> 选择文件格式->用默认的带分隔符->选第一行包含有列名称选项->下一步-> 制定列分割符->逗号->下一步-> 选择目的->目的(用于SQL Server的Microfost OLE DB提供程序)-> 服务器(可选择目标局域网内能访问到的所有SQL Server服务器)-> 选择使用windows身份验证还是使用SQL Serve身份验证(输入数据库的用户名和密码)-> 数据库(可选择上面选中SQL Server服务器上所有权限范围内的数据库)->下一步-> 选择源表和视图->修改目的表名为刚才创建的表名->转换(在目的表中追加行) ->下一步-> 保存、调度和复制包-> 时间->立即运行(如果要实现隔一段时间自动把文本文件导入,选调度DTS包以便以后执行)-> 保存(可以不选)-> [保存DTS包(保存的时候要输入DTS的包名及详细描述)->下一步->]->完成 正在执行包->图形界面显示文本文件到表的步骤和状态->完成 如果要更改导入时间的年月信息的表名,例如table_0113到原来的表名, 在企业管理器里把原来的表名改成table_old_0113,table_0113改名成table。 这会对应用程序里频繁访问的表照成一定的中断。 
注意:
源表上的建的索引和主键约束不能用上面介绍的1和2方法转移过来,还需要手工来建索引和主键。 标志种子和not null的约束可以继承过来。 导入视图时会把源视图里所有的真实数据导入成一个新表,而不是视图。
 
 三、SQL Server存储过程或用户定义的函数导出导入
 
 
1、导出存储过程或用户定义的函数成*.sql文件 在SQL Server企业管理器里选中源数据库, 存储过程->单选或者多选中要转移的存储过程-> 用户定义的函数->单选或者多选中要转移的函数-> 按鼠标右键,选所有任务->生成SQL脚本->确定->在自己的电脑硬盘中生成一个自定义的*.sql文件-> 保存</