Mysql Sql語句注釋大全實例分享

這篇文章主要介紹了mysql sql語句注釋大全,需要的朋友可以參考下

mysql的SQL語句里面是可以加注釋的,下面給大家介紹mysql sql語句注釋大全,一起看看吧!

1、說明:創建數據庫  CREATE DATABASE database-name  2、說明:刪除數據庫  drop database dbname  3、說明:備份sql   server  ---   創建 備份數據的 device  USE   master  EXEC sp_addumpdevice'disk','testBack','c:mssql7backupMyNwind_1.dat'  ---   開始 備份  BACKUPDATABASE pubsTO testBack  4、說明:創建新表  create table tabname(col1   type1 [not null]   [primary key],col2   type2 [not null],..)  根據已有的表創建新表:  A:create table tab_newlike tab_old   (使用舊表創建新表)  B:create table tab_newas select col1,col2…from tab_old   definition only  5、說明:刪除新表  drop table tabname  6、說明:增加一個列  Alter table tabnameadd column col   type  注:列增加后將不能刪除。DB2中列加上后數據類型也不能改變,唯一能改變的是增加varchar類型的長度。  7、說明:添加主鍵:Alter table tabnameadd primary key(col)  說明:刪除主鍵:Alter table tabnamedrop primary key(col)  8、說明:創建索引:create [unique]index idxnameon tabname(col….)  刪除索引:drop index idxname  注:索引是不可更改的,想更改必須刪除重新建。  9、說明:創建視圖:create view viewnameas select statement  刪除視圖:drop view viewname  10、說明:幾個簡單的基本的sql語句  選擇:select *from table1where 范圍  插入:insert into table1(field1,field2)values(value1,value2)  刪除:delete from table1where 范圍  更新:update table1set field1=value1where 范圍  查找:select *from table1where field1like '%value1%'---like的語法很精妙,查資料!  排序:select *from table1order by field1,field2   [desc]  總數:select count as totalcountfrom table1  求和:select sum(field1)as sumvaluefrom table1  平均:select avg(field1)as avgvaluefrom table1  最大:select max(field1)as maxvaluefrom table1  最小:select min(field1)as minvaluefrom 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 aLEFT OUT JOIN bON a.a   = b.c  B:right (outer)join:  右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。  C:full/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 bfrom awhere 1<>1(僅用于SQlServer)  法二:select top 0   * into bfrom a  2、說明:拷貝表(拷貝數據,源表名:a   目標表名:b) (Access可用)  insert into b(a,   b, c) select d,e,ffrom b;  3、說明:跨數據庫之間表的拷貝(具體數據使用絕對路徑)   (Access可用)  insert into b(a,   b, c) select d,e,ffrom bin ‘具體數據庫'where 條件  例子:..from bin '"&Server.MapPath(".")&"data.mdb"   &"' where..  4、說明:子查詢(表名1:a   表名2:b)  select a,b,cfrom awhere aIN (select dfrom b   ) 或者: select a,b,cfrom awhere aIN (1,2,3)  5、說明:顯示文章、提交人和最后回復時間  select a.title,a.username,b.adddatefrom 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 aLEFT OUT JOIN bON a.a   = b.c  7、說明:在線視圖查詢(表名1:a   )  select *from (SELECT a,b,cFROM a)   T where t.a   > 1;  8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括  select *from table1where time between time1and time2  select a,b,c,from table1where anot between 數值1and 數值2  9、說明:in 的使用方法  select *from table1where a   [not]in (‘值1','值2','值4','值6')  10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息  delete from table1where not exists   ( select *from table2where table1.field1=table2.field1   )  11、說明:四表聯查問題:  select *from aleft inner join bon a.a=b.bright inner join con a.a=c.cinner join don a.a=d.dwhere .....  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 @startint,@end int   @sql    nvarchar(600)   set @sql='select top'+str(@end-@start+1)+'+from Twhere ridnot in(select top'+str(@str-1)+'Ridfrom Twhere Rid>-1)'   exec sp_executesql   @sql  注意:在top后不能直接跟一個變量,所以在實際應用中只有這樣的進行特殊的處理。Rid為一個標識列,如果top后還有具體的字段,這樣做是非常有好處的。因為這樣可以避免top的字段如果是邏輯索引的,查詢的結果后實際表中的不一致(邏輯索引中的數據有可能和數據表中的不一致,而查詢時如果處在索引則首先查詢索引)  14、說明:前10條記錄  select top 10   * form table1 where 范圍  15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.)  select a,b,cfrom tablename   ta where a=(select max(a)from tablename   tb where tb.b=ta.b)  16、說明:包括所有在   TableA 中但不在 TableB和TableC 中的行并消除所有重復行而派生出一個結果表  (select afrom tableA   ) except (select afrom tableB)except (select afrom tableC)  17、說明:隨機取出10條數據  select top 10   * from tablenameorder by newid()  18、說明:隨機選擇記錄  select newid()  19、說明:刪除重復記錄  1),delete from tablenamewhere idnot in (select max(id)from tablenamegroup by col1,col2,...)  2),select distinct *into temp from tablename   delete from tablename   insert into tablenameselect *from temp  評價:   這種操作牽連大量的數據的移動,這種做法不適合大容量但數據操作  3),例如:在一個外部表中導入數據,由于某些原因第一次只導入了一部分,但很難判斷具體位置,這樣只有在下一次全部導入,這樣也就產生好多重復的字段,怎樣刪除重復字段  alter table tablename  --添加一個自增列  add column_bint identity(1,1)   delete from tablenamewhere column_bnot in(  select max(column_b) from tablenamegroup by column1,column2,...)  alter table tablenamedrop column column_b  20、說明:列出數據庫里所有的表名  select name from sysobjectswhere type='U' //   U代表用戶  21、說明:列出表里的所有的列名  select name from syscolumnswhere id=object_id('TableName')  22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現多重選擇,類似select 中的case。  select type,sum(case venderwhen 'A' then pcselse 0end),sum(case venderwhen 'C' then pcselse 0end),sum(case venderwhen 'B' then pcselse 0end)FROM tablenamegroup 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 idasc)   table_別名 order by iddesc  三、技巧  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 NOCOUNTON  DECLARE @LogicalFileName   sysname,   @MaxMinutesINT,   @NewSizeINT  USE   tablename --   要操作的數據庫名  SELECT @LogicalFileName   = 'tablename_log',--   日志文件名  @MaxMinutes   = 10, --   Limit on time allowed to wrap log.   @NewSize   = 1 --   你想設定的日志文件的大小(M)  Setup   / initialize  DECLARE @OriginalSizeint  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   (DummyColumnchar (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 sysfilesWHERE name =   @LogicalFileName)    AND (@OriginalSize   * 8 /1024) > @NewSize    BEGIN --   Outer loop.  SELECT @Counter   = 0   WHILE    ((@Counter < @OriginalSize / 16) AND (@Counter   < 50000))   BEGIN --   update   INSERT DummyTransVALUES ('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 NOCOUNTOFF  8、說明:更改某個表  exec sp_changeobjectowner'tablename','dbo'  9、存儲更改全部表  CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch  @OldOwneras NVARCHAR(128),  @NewOwneras NVARCHAR(128)  AS  DECLARE @Name  as NVARCHAR(128)  DECLARE @Owner as NVARCHAR(128)  DECLARE @OwnerName as NVARCHAR(128)  DECLARE curObjectCURSOR FOR  select 'Name'  =name,    'Owner'  =   user_name(uid)  from sysobjects  where user_name(uid)=@OldOwner  order by name  OPEN  curObject  FETCH NEXT FROM curObjectINTO @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 curObjectINTO @Name,   @Owner  END  close curObject  deallocate curObject  GO  10、SQL   SERVER中直接循環寫入數據  declare @iint  set @i=1  while   @i<30  begin    insert into test   (userid) values(@i)    set @i=@i+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_tableset score   =score*1.01  where score<60  if    (select min(score)from tb_table)>60   break   else    continue  end  數據開發-經典  1.按姓氏筆畫排序:  Select *From TableNameOrder By CustomerNameCollate Chinese_PRC_Stroke_ci_as   //從少到多  2.數據庫加密:  select encrypt('原始密碼')  select pwdencrypt('原始密碼')  select pwdcompare('原始密碼','加密后密碼')   = 1--相同;否則不相同   encrypt('原始密碼')  select pwdencrypt('原始密碼')  select pwdcompare('原始密碼','加密后密碼')   = 1--相同;否則不相同  3.取回表中字段:  declare @listvarchar(1000),  @sql   nvarchar(1000)  select @list=@list+','+b.name from sysobjects   a,syscolumns b where a.id=b.idand 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 hcforeachCURSOR GLOBAL FOR SELECT 'kill   '+RTRIM(spid)FROM master.dbo.sysprocesses  WHERE program_nameIN('SQL   profiler',N'SQL   事件探查器')  EXEC sp_msforeach_worker'?'  7.記錄搜索:  開頭到N條記錄  Select Top N   * From 表  -------------------------------  N到M條記錄(要有主索引ID)  Select Top M-N   * From 表Where IDin (Select Top M   ID From 表)Order by ID Desc  ----------------------------------  N到結尾記錄  Select Top N   * From 表Order by IDDesc  案例  例如1:一張表有一萬多條記錄,表的第一個字段   RecID 是自增長字段, 寫一個SQL語句,找出表的第31到第40個記錄。   select top 10   recid from Awhere recidnot in(select top 30   recid from A)  分析:如果這樣寫會產生某些問題,如果recid在表中存在邏輯索引。   select top 10   recid from Awhere……是從索引中查找,而后面的select top 30   recid from A則在數據表中查找,這樣由于索引中的順序有可能和數據表中的不一致,這樣就導致查詢到的不是本來的欲得到的數據。  解決方案  1,   用order by select top 30   recid from Aorder by ricid   如果該字段不是自增長,就會出現問題  2,   在那個子查詢中也加條件:select top 30   recid from Awhere 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 sysobjectswhere xtype='u' and status>=0  10:獲取某一個表的所有字段  select name from syscolumnswhere id=object_id('表名')  select name from syscolumnswhere idin (select idfrom sysobjectswhere type   = 'u' and name ='表名')  兩種方式的效果相同  11:查看與某一個表相關的視圖、存儲過程、函數  select a.*from sysobjects   a, syscomments b where a.id   = b.id and b.textlike '%表名%'  12:查看當前數據庫中所有存儲過程  select name as 存儲過程名稱from sysobjectswhere xtype='P'  13:查詢用戶創建的所有數據庫  select *from master..sysdatabases   D where sidnot in(select sidfrom master..sysloginswhere name='sa')  或者  select dbid,name AS DB_NAMEfrom master..sysdatabaseswhere sid   <> 0x01  14:查詢某一個表的字段和數據類型  select column_name,data_typefrom 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)  --1、openrowset  --查詢示例  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 ainner 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  --3、opendatasource/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)   取子串,字符串的下標是從“1”,start為起始位置,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 語句影響的行數的信息。如果存儲過程中包含的一些語句并不返回許多實際的數據,則該設置由于大量減少了網絡流量,因此可顯著提高性能。SETNOCOUNT   設置是在執行或運行時設置,而不是在分析時設置。  SET NOCOUNT   為 ON 時,不返回計數(表示受   Transact-SQL 語句影響的行數)。  SET NOCOUNT   為 OFF 時,返回計數  常識  在SQL查詢中:from后最多可以跟多少張表或視圖:256  在SQL語句中出現Order by,查詢時,先排序,后取  在SQL中,一個字段的最大容量是8000,而對于nvarchar(4000),由于nvarchar是Unicode碼。  SQLServer2000同步復制技術實現步驟  一、   預備工作  1.發布服務器,訂閱服務器都創建一個同名的windows用戶,并設置相同的密碼,做為發布快照文件夾的有效訪問用戶  --管理工具  --計算機管理  --用戶和組  --右鍵用戶  --新建用戶  --建立一個隸屬于administrator組的登陸windows的用戶(SynUser)  2.在發布服務器上,新建一個共享目錄,做為發布的快照文件的存放目錄,操作:  我的電腦--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、配置發布服務器  打開企業管理器,在發布服務器(B、C、D)上執行以下步驟:  (1)   從[工具]下拉菜單的[復制]子菜單中選擇[配置發布、訂閱服務器和分發]出現配置發布和分發向導  (2)   [下一步] 選擇分發服務器 可以選擇把發布服務器自己作為分發服務器或者其他sql的服務器(選擇自己)  (3)   [下一步] 設置快照文件夾  采用默認servernamePub  (4)   [下一步] 自定義配置  可以選擇:是,讓我設置分發數據庫屬性啟用發布服務器或設置發布設置  否,使用下列默認設置(推薦)  (5)   [下一步] 設置分發數據庫名稱和位置 采用默認值  (6)   [下一步] 啟用發布服務器 選擇作為發布的服務器  (7)   [下一步] 選擇需要發布的數據庫和發布類型  (8)   [下一步] 選擇注冊訂閱服務器  (9)   [下一步] 完成配置  2、創建出版物  發布服務器B、C、D上  (1)從[工具]菜單的[復制]子菜單中選擇[創建和管理發布]命令  (2)選擇要創建出版物的數據庫,然后單擊[創建發布]  (3)在[創建發布向導]的提示對話框中單擊[下一步]系統就會彈出一個對話框。對話框上的內容是復制的三個類型。我們現在選第一個也就是默認的快照發布(其他兩個大家可以去看看幫助)  (4)單擊[下一步]系統要求指定可以訂閱該發布的數據庫服務器類型,  SQLSERVER允許在不同的數據庫如   orACLE或ACCESS之間進行數據復制。  但是在這里我們選擇運行"SQL   SERVER 2000"的數據庫服務器  (5)單擊[下一步]系統就彈出一個定義文章的對話框也就是選擇要出版的表  注意:   如果前面選擇了事務發布 則再這一步中只能選擇帶有主鍵的表  (6)選擇發布名稱和描述  (7)自定義發布屬性   向導提供的選擇:  是   我將自定義數據篩選,啟用匿名訂閱和或其他自定義屬性  否   根據指定方式創建發布 (建議采用自定義的方式)  (8)[下一步]   選擇篩選發布的方式  (9)[下一步]   可以選擇是否允許匿名訂閱  1)如果選擇署名訂閱,則需要在發布服務器上添加訂閱服務器  方法:   [工具]->[復制]->[配置發布、訂閱服務器和分發的屬性]->[訂閱服務器] 中添加  否則在訂閱服務器上請求訂閱時會出現的提示:改發布不允許匿名訂閱  如果仍然需要匿名訂閱則用以下解決辦法  [企業管理器]->[復制]->[發布內容]->[屬性]->[訂閱選項]   選擇允許匿名請求訂閱  2)如果選擇匿名訂閱,則配置訂閱服務器時不會出現以上提示  (10)[下一步]   設置快照 代理程序調度  (11)[下一步]   完成配置  當完成出版物的創建后創建出版物的數據庫也就變成了一個共享數據庫  有數據  srv1.庫名..author有字段:id,name,phone,  srv2.庫名..author有字段:id,name,telphone,adress  要求:  srv1.庫名..author增加記錄則srv1.庫名..author記錄增加  srv1.庫名..author的phone字段更新,則srv1.庫名..author對應字段telphone更新  --*/  --大致的處理步驟  --1.在   srv1 上創建連接服務器,以便在 srv1 中操作 srv2,實現同步  exec sp_addlinkedserver'srv2','','SQLOLEDB','srv2的sql實例名或ip'  exec sp_addlinkedsrvlogin'srv2','false',null,'用戶名','密碼'  go  --2.在   srv1 和 srv2 這兩臺電腦中,啟動 msdtc(分布式事務處理服務),并且設置為自動啟動  。我的電腦--控制面板--管理工具--服務--右鍵   Distributed Transaction Coordinator--屬性--啟動--并將啟動類型設置為自動啟動  go  --然后創建一個作業定時調用上面的同步處理存儲過程就行了  企業管理器  --管理  --SQL   Server代理  --右鍵作業  --新建作業  --"常規"項中輸入作業名稱  --"步驟"項  --新建  --"步驟名"中輸入步驟名  --"類型"中選擇"Transact-SQL   腳本(TSQL)"  --"數據庫"選擇執行命令的數據庫  --"命令"中輸入要執行的語句:   exec p_process  --確定  --"調度"項  --新建調度  --"名稱"中輸入調度名稱  --"調度類型"中選擇你的作業執行安排  --如果選擇"反復出現"  --點"更改"來設置你的時間安排  然后將SQL   Agent服務啟動,并設置為自動啟動,否則你的作業不會被執行  設置方法:  我的電腦--控制面板--管理工具--服務--右鍵   SQLSERVERAGENT--屬性--啟動類型--選擇"自動啟動"--確定.  --3.實現同步處理的方法2,定時同步  --在srv1中創建如下的同步處理存儲過程  create proc   p_process  as  --更新修改過的數據  update bset name=i.name,telphone=i.telphone  from srv2.庫名.dbo.author   b,author i  where b.id=i.idand  (b.name <>   i.name or b.telphone   <> i.telphone)  --插入新增的數據  insert srv2.庫名.dbo.author(id,name,telphone)  select id,name,telphonefrom author   i  where not exists(  select *from srv2.庫名.dbo.authorwhere id=i.id)  --刪除已經刪除的數據(如果需要的話)  delete b  from srv2.庫名.dbo.author   b  where not exists(  select *from authorwhere id=b.id)  go

相關推薦:

關于Mysql元數據如何生成Hive建表語句注釋腳本

關于Mysql元數據如何生成Hive建表語句注釋腳本

關于Mysql元數據如何生成Hive建表語句注釋腳本

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享