1. 程式人生 > >經典SQL語句大全-【轉載自】部落格園,作者部落格:YuBinfeng's Technology Blog

經典SQL語句大全-【轉載自】部落格園,作者部落格:YuBinfeng's Technology Blog

因最近學習MySQL,閒來無事逛帖子時,發現這篇較為經典的部落格,特轉載以防備用學習,同時希望也可以幫到他人,廢話不多說,進入正文 


一、基礎

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],..)

根據已有的表建立新表:

Acreate table tab_new like tab_old (使用舊錶建立新表)

Bcreate 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),不消除重複行。

CINTERSECT 運算子

INTERSECT運算子通過只包括 TABLE1 TABLE2 中都有的行並消除所有重複行而派生出一個結果表。當 ALL INTERSECT 一起使用時 (INTERSECT ALL),不消除重複行。

注:使用運算詞的幾個查詢結果行必須是一致的

12、說明:使用外連線

Aleft 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

Bright outer join:

右外連線(右連線):結果集既包括連線表的匹配連線行,也包括右連線表的所有行。

Cfull/cross outer join

全外連線:不僅包括符號連線表的匹配行,還包括兩個連線表中的所有記錄。

12、分組:Group by:

   一張表,一旦分組 完成後,查詢後只能得到組相關的資訊。

    組相關的資訊:(統計資訊) count,sum,max,min,avg  分組的標準)

    SQLServer中分組時:不能以text,ntext,image型別的欄位作為分組依據

   selecte統計函式中的欄位,不能和普通的欄位放在一起;

13、對資料庫進行操作:

   分離資料庫 sp_detach_db;附加資料庫sp_attach_db 後接表明,附加需要完整的路徑名

14.如何修改資料庫的名稱:

sp_renamedb 'old_name', 'new_name'

 

二、提升

1、說明:複製表(只複製結構,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1<>1僅用於SQlServer

法二:select top 0 * into b from a

2、說明:拷貝表(拷貝資料,源表名: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、說明:子查詢(表名1a 表名2b)

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、說明:外連線查詢(表名1a 表名2b)

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、說明:線上檢視查詢(表名1a )

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.排序欄位

具體實現:

關於資料庫分頁:

  declare @start int,@end int

  @sql  nvarchar(600)

  set @sql=’select top’+str(@[email protected]+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’

  exec sp_executesql @sql

 

注意:在top後不能直接跟一個變數,所以在實際應用中只有這樣的進行特殊的處理。Rid為一個標識列,如果top後還有具體的欄位,這樣做是非常有好處的。因為這樣可以避免 top的欄位如果是邏輯索引的,查詢的結果後實際表中的不一致(邏輯索引中的資料有可能和資料表中的不一致,而查詢時如果處在索引則首先查詢索引

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中但不在 TableBTableC中的行並消除所有重複行而派生出一個結果表

(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、說明:刪除重複記錄

1),delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

2),select distinct * into temp from tablename

  delete from tablename

  insert into tablename select * from temp

評價: 這種操作牽連大量的資料的移動,這種做法不適合大容量但資料操作

3),例如:在一個外部表中匯入資料,由於某些原因第一次只匯入了一部分,但很難判斷具體位置,這樣只有在下一次全部匯入,這樣也就產生好多重複的欄位,怎樣刪除重複欄位

alter table tablename

--新增一個自增列

add  column_b int identity(1,1)

 delete from tablename where column_b not in(

select max(column_b)  from tablename group by column1,column2,...)

alter table tablename drop column column_b

20、說明:列出資料庫裡所有的表名

select name from sysobjects where type='U' // U代表使用者

21、說明:列出表裡的所有的列名

select name from syscolumns where id=object_id('TableName')

22、說明:列示typevenderpcs欄位,以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、說明:選擇從1015的記錄

select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

三、技巧

11=11=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)[email protected]

order by name

OPEN   curObject

FETCH NEXT FROM curObject INTO @Name, @Owner

WHILE(@@FETCH_STATUS=0)

BEGIN     

if @[email protected]

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

 

10SQL SERVER中直接迴圈寫入資料

declare @i int

set @i=1

while @i<30

begin

    insert into test (userid) values(@i)

    set @[email protected]+1

end

案例

有如下表,要求就裱中所有沒有及格的成績,在每次增長0.1的基礎上,使他們剛好及格:

    Name     score

    Zhangshan   80

    Lishi       59

    Wangwu      50

    Songquan    69

while((select min(score) from tb_table)<60)

begin

update tb_table set score =score*1.01

where score<60

if  (select min(score) from tb_table)>60

  break

 else

    continue

end

 

資料開發-經典

 

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 @[email protected]+','+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

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

NM條記錄(要有主索引ID)

Select Top M-N * From Where ID in (Select Top M ID From ) Order by ID   Desc

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

N到結尾記錄

Select Top N * From Order by ID Desc

案例

例如1:一張表有一萬多條記錄,表的第一個欄位 RecID 是自增長欄位, 寫一個SQL語句, 找出表的第31到第40個記錄。

 select top 10 recid from A where recid not  in(select top 30 recid from A)

分析:如果這樣寫會產生某些問題,如果recid在表中存在邏輯索引。

    select top 10 recid from A where……是從索引中查詢,而後面的select top 30 recid from A則在資料表中查詢,這樣由於索引中的順序有可能和資料表中的不一致,這樣就導致查詢到的不是本來的欲得到的資料。

解決方案

1,order by select top 30 recid from A order by ricid 如果該欄位不是自增長,就會出現問題

2,在那個子查詢中也加條件:select top 30 recid from A where recid>-1

2:查詢表中的最後以條記錄,並不知道這個表共有多少資料,以及表結構。

set @s = 'select top 1 * from T   where pid not in (select top ' + str(@count-1) + ' pid  from  T)'

print @s      exec  sp_executesql  @s

9:獲取當前資料庫中的所有使用者表

select Name from sysobjects where xtype='u' and status>=0

10:獲取某一個表的所有欄位

select name from syscolumns where id=object_id('表名')

select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')

兩種方式的效果相同

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 = '表名'

15:不同伺服器資料庫之間的資料操作

--建立連結伺服器

exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '遠端伺服器名或ip地址 '

exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '使用者名稱 ', '密碼 '

--查詢示例

select * from ITSV.資料庫名.dbo.表名

--匯入示例

select * into from ITSV.資料庫名.dbo.表名

--以後不再使用時刪除連結伺服器

exec sp_dropserver  'ITSV ', 'droplogins '

 

--連線遠端/區域網資料(openrowset/openquery/opendatasource)

--1openrowset

--查詢示例

select * from openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)

--生成本地表

select * into from openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)

 

--把本地表匯入遠端表

insert openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)

select *from 本地表

--更新本地表

update b

set b.A=a.A

 from openrowset( 'SQLOLEDB ', 'sql伺服器名 '; '使用者名稱 '; '密碼 ',資料庫名.dbo.表名)as a inner join 本地表 b

on a.column1=b.column1

--openquery用法需要建立一個連線

--首先建立一個連線建立連結伺服器

exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '遠端伺服器名或ip地址 '

--查詢

select *

FROM openquery(ITSV,  'SELECT *  FROM 資料庫.dbo.表名 ')

--把本地表匯入遠端表

insert openquery(ITSV,  'SELECT *  FROM 資料庫.dbo.表名 ')

select * from 本地表

--更新本地表

update b

set b.B=a.B

FROM openquery(ITSV,  'SELECT * FROM 資料庫.dbo.表名 ') as a 

inner join 本地表 b on a.A=b.A

 

--3opendatasource/openrowset

SELECT   *

FROM   opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ' ).test.dbo.roy_ta

--把本地表匯入遠端表

insert opendatasource( 'SQLOLEDB ',  'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ').資料庫.dbo.表名

select * from 本地表 

SQL Server基本函式

SQL Server基本函式

1.字串函式 長度與分析用

1,datalength(Char_expr) 返回字串包含字元數,但不包含後面的空格

2,substring(expression,start,length) 取子串,字串的下標是從“1start為起始位置,length為字串長度,實際應用中以len(expression)取得其長度

3,right(char_expr,int_expr) 返回字串右邊第int_expr個字元,還用left於之相反

4,isnull( check_expression , replacement_value )如果check_expression為空,則返回replacement_value的值,不為空,就返回check_expression字元操作類

5,Sp_addtype自定義資料型別

例如:EXEC sp_addtype birthday, datetime, 'NULL'

6,set nocount {on|off}

使返回的結果中不包含有關受 Transact-SQL 語句影響的行數的資訊。如果儲存過程中包含的一些語句並不返回許多實際的資料,則該設定由於大量減少了網路流量,因此可顯著提高效能。SET NOCOUNT 設定是在執行或執行時設定,而不是在分析時設定。SET NOCOUNT ON 時,不返回計數(表示受 Transact-SQL 語句影響的行數)。

 

 

SET NOCOUNT

OFF 時,返回計數

常識

 

SQL查詢中:from後最多可以跟多少張表或檢視:256SQL語句中出現 Order by,查詢時,先排序,後取SQL中,一個欄位的最大容量是8000,而對於nvarchar(4000),由於nvarcharUnicode碼。 

       

SQLServer2000

同步複製技術實現步驟

一、 預備工作

1.釋出伺服器,訂閱伺服器都建立一個同名的windows使用者,並設定相同的密碼,做為釋出快照資料夾的有效訪問使用者--管理工具--計算機管理--使用者和組--右鍵使用者--新建使用者--建立一個隸屬於administrator組的登陸windows的使用者(SynUser2.在釋出伺服器上,新建一個共享目錄,做為釋出的快照檔案的存放目錄,操作:

我的電腦--D:\ 新建一個目錄,名為: PUB

--右鍵這個新建的目錄--屬性--共享--選擇"共享該資料夾"--通過"許可權"按紐來設定具體的使用者許可權,保證第一步中建立的使用者(SynUser) 具有對該資料夾的所有許可權

 

--確定3.設定SQL代理(SQLSERVERAGENT)服務的啟動使用者(釋出/訂閱伺服器均做此設定)

開始--程式--管理工具--服務

--右鍵SQLSERVERAGENT--屬性--登陸--選擇"此賬戶"--輸入或者選擇第一步中建立的windows登入使用者名稱(SynUser--"密碼"中輸入該使用者的密碼4.設定SQL Server身份驗證模式,解決連線時的許可權問題(釋出/訂閱伺服器均做此設定)

企業管理器

--右鍵SQL例項--屬性--安全性--身份驗證--選擇"SQL Server Windows"--確定5.在釋出伺服器和訂閱伺服器上互相註冊

企業管理器

--右鍵SQL Server--新建SQL Server註冊...--下一步--可用的伺服器中,輸入你要註冊的遠端伺服器名 --新增--下一步--連線使用,選擇第二個"SQL Server身份驗證"--下一步--輸入使用者名稱和密碼(SynUser--下一步--選擇SQL Server,也可以建立一個新組--下一步--完成6.對於只能用IP,不能用計算機名的,為其註冊伺服器別名(此步在實施中沒用到) (在連線端配置,比如,在訂閱伺服器上配置的話,伺服器名稱中輸入的是釋出伺服器的IP)

開始--程式--Microsoft SQL Server--客戶端網路實用工具

--別名--新增--網路庫選擇"tcp/ip"--伺服器別名輸入SQL伺服器名--連線引數--伺服器名稱中輸入SQL伺服器ip地址--如果你修改了SQL的埠,取消選擇"動態決定埠",並輸入對應的埠號

二、 正式配置

1、配置釋出伺服器

開啟企業管理器,在釋出伺服器(BCD)上執行以下步驟:

(1) [工具]下拉選單的[複製]子選單中選擇[配置釋出、訂閱伺服器和分發]出現配置釋出和分發嚮導(2) [下一步] 選擇分發伺服器 可以選擇把釋出伺服器自己作為分發伺服器或者其他sql的伺服器(選擇自己)(3) [下一步] 設定快照資料夾

採用預設\\servername\Pub

(4) [下一步] 自定義配置

可以選擇:,讓我設定分發資料庫屬性啟用釋出伺服器或設定釋出設定

,使用下列預設設定(推薦)

(5) [下一步] 設定分發資料庫名稱和位置 採用預設值(6) [下一步] 啟用釋出伺服器 選擇作為釋出的伺服器(7) [下一步] 選擇需要釋出的資料庫和釋出型別(8) [下一步] 選擇註冊訂閱伺服器(9) [下一步] 完成配置2、創建出版物

釋出伺服器BCD

(1)[工具]選單的[複製]子選單中選擇[建立和管理髮布]命令(2)選擇要創建出版物的資料庫,然後單擊[建立釋出](3)[建立釋出嚮導]的提示對話方塊中單擊[下一步]系統就會彈出一個對話方塊。對話方塊上的內容是複製的三個型別。我們現在選第一個也就是預設的快照發布(其他兩個大家可以去看看幫助)(4)單擊[下一步]系統要求指定可以訂閱該釋出的資料庫伺服器型別,SQLSERVER允許在不同的資料庫如 orACLEACCESS之間進行資料複製。

但是在這裡我們選擇執行"SQL SERVER 2000"的資料庫伺服器

(5)單擊[下一步]系統就彈出一個定義文章的對話方塊也就是選擇要出版的表

注意: 如果前面選擇了事務釋出 則再這一步中只能選擇帶有主鍵的表