免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
SQL Server 游標(biāo)運(yùn)用:批量創(chuàng)建、刪除鏈接服務(wù)器

一、背景


我們的數(shù)據(jù)庫(kù)比較多,它們提供了外網(wǎng)的訪問(wèn),我現(xiàn)在想對(duì)這些數(shù)據(jù)庫(kù)進(jìn)行一些管理,獲取這些數(shù)據(jù)庫(kù)的一些信息,我們可以通過(guò)什么方式實(shí)現(xiàn)呢?


在SQL Server2005版本之后有一個(gè)叫做鏈接服務(wù)器的新功能,基本的操作可以參考:


SQL Server 2005鏈接服務(wù)器,我們就通過(guò)這個(gè)鏈接服務(wù)器來(lái)獲取我們需要的數(shù)據(jù),但是我們的服務(wù)器比較多,這個(gè)批量創(chuàng)建鏈接服務(wù)器和批量刪除鏈接服務(wù)器就呼之欲出了。


 


二、設(shè)計(jì)過(guò)程


設(shè)計(jì)簡(jiǎn)述:創(chuàng)建如下圖的表結(jié)構(gòu),LinkName保存遠(yuǎn)程鏈接的別名,LinkName2是創(chuàng)建鏈接方式2的一個(gè)補(bǔ)充字段,LinkIP代表遠(yuǎn)程服務(wù)器的地址,如果有端口的還需要加上端口。


這里為什么要設(shè)計(jì)成LinkName與LinkName2并存呢?這是因?yàn)槲覀冊(cè)赥-SQL使用遠(yuǎn)程鏈接的時(shí)候是通過(guò)別名的,我在進(jìn)行兩種方式的切換,只要修改調(diào)換下這兩個(gè)字段的名稱,并且去存儲(chǔ)過(guò)程sp_CreateLink注釋方式1的代碼,恢復(fù)方式2的代碼;





(圖1:LinkConfig表,鏈接方式1)





(圖2:LinkConfig表,鏈接方式2)






(圖3:鏈接方式1的屬性)











(圖4:鏈接方式2的屬性)


詳細(xì)代碼:創(chuàng)建表LinkConfig、批量創(chuàng)建鏈接服務(wù)器存儲(chǔ)過(guò)程、批量刪除鏈接服務(wù)器存儲(chǔ)過(guò)程。


 



--創(chuàng)建表CREATE TABLE [dbo].[LinkConfig](    [Id] [int] IDENTITY(1,1) NOT NULL,    [LinkName] [nvarchar](50) NULL,    [LinkName2] [nvarchar](50) NULL,    [LinkIP] [nvarchar](50) NULL,    [LinkSa] [nvarchar](50) NULL,    [LinkPassword] [nvarchar](50) NULL,    [State] [int] NULL CONSTRAINT [DF_LinkConfig_State]  DEFAULT ((0)), CONSTRAINT [PK_LinkConfig] PRIMARY KEY CLUSTERED (    [Id] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]) ON [PRIMARY]



--創(chuàng)建遠(yuǎn)程鏈接sp-- =============================================-- Author:        <Viajar>-- Create date: <2012.01.05>-- Description:    <創(chuàng)建遠(yuǎn)程鏈接>-- =============================================CREATE PROCEDURE [dbo].[sp_CreateLink] ASBEGIN    SET NOCOUNT ON;    --創(chuàng)建遠(yuǎn)程鏈接    DECLARE @linkname VARCHAR(100)    DECLARE @linkip VARCHAR(100)    DECLARE @linksa VARCHAR(100)    DECLARE @linkpassword VARCHAR(100)    DECLARE @isexists VARCHAR(10)    DECLARE @sql NVARCHAR(4000)    SET @isexists = 'False'    DECLARE @itemCur CURSOR    SET @itemCur = CURSOR FOR         SELECT [LinkName],[LinkIP],[LinkSa],[LinkPassword] FROM dbo.LinkConfig WHERE State =1    OPEN @itemCur    FETCH NEXT FROM @itemCur INTO @linkname,@linkip,@linksa,@linkpassword    WHILE @@FETCH_STATUS=0    BEGIN        --正在處理        PRINT @linkname        --判斷是否存在        set @sql =             N'IF EXISTS (SELECT * FROM sys.servers WHERE name = '''+ @linkname + ''')            begin set @IsExistsOUT = ''True'' end'        exec sp_executesql @sql,N'@IsExistsOUT varchar(10) OUTPUT',@IsExistsOUT=@isexists OUTPUT        --不存在        IF(@IsExists = 'False')        BEGIN            --創(chuàng)建鏈接方式            SET @sql = '            EXEC master.dbo.sp_addlinkedserver @server = N'''+@linkname+''', @srvproduct=N''SQL Server'''            EXEC(@sql)            --設(shè)置密碼            SET @sql = '            EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'''+@linkname+''', @locallogin = NULL , @useself = N''False'', @rmtuser = N'''+@linksa+''', @rmtpassword = N'''+@linkpassword+''''            EXEC(@sql)--            --創(chuàng)建鏈接方式--            SET @sql = '--            EXEC master.dbo.sp_addlinkedserver @server = N'''+@linkname+''', @srvproduct=N'''+@linkname+''', @provider=N''SQLNCLI'', @datasrc=N'''+@linkip+''''--            EXEC(@sql)----            --設(shè)置密碼--            SET @sql = '--            EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'''+@linkname+''', @locallogin = NULL , @useself = N''False'', @rmtuser = N'''+@linksa+''', @rmtpassword = N'''+@linkpassword+''''--            EXEC(@sql)----            --設(shè)置屬性--            SET @sql = '--            EXEC master.dbo.sp_serveroption @server=N'''+@linkname+''', @optname=N''rpc'', @optvalue=N''true''--            ;--            EXEC master.dbo.sp_serveroption @server=N'''+@linkname+''', @optname=N''rpc out'', @optvalue=N''true''--            '--            EXEC(@sql)        END        SET @isexists = 'False'        FETCH NEXT FROM @itemCur INTO @linkname,@linkip,@linksa,@linkpassword    END     CLOSE @itemCur    DEALLOCATE @itemCurEND



--刪除遠(yuǎn)程鏈接sp-- =============================================-- Author:        <Viajar>-- Create date: <2012.01.05>-- Description:    <刪除遠(yuǎn)程鏈接>-- =============================================ALTER PROCEDURE [dbo].[sp_DropLink] ASBEGIN    SET NOCOUNT ON;    --刪除遠(yuǎn)程鏈接    DECLARE @linkname VARCHAR(100)    DECLARE @linkip VARCHAR(100)    DECLARE @linksa VARCHAR(100)    DECLARE @linkpassword VARCHAR(100)    DECLARE @isexists VARCHAR(10)    DECLARE @sql NVARCHAR(4000)    SET @isexists = 'False'    DECLARE @itemCur CURSOR    SET @itemCur = CURSOR FOR         SELECT [LinkName],[LinkIP],[LinkSa],[LinkPassword] FROM dbo.LinkConfig WHERE State =1    OPEN @itemCur    FETCH NEXT FROM @itemCur INTO @linkname,@linkip,@linksa,@linkpassword    WHILE @@FETCH_STATUS=0    BEGIN        --正在處理        PRINT @linkname        --判斷是否存在        set @sql =             N'IF EXISTS (SELECT * FROM sys.servers WHERE name = '''+ @linkname + ''')            begin set @IsExistsOUT = ''True'' end'        exec sp_executesql @sql,N'@IsExistsOUT varchar(10) OUTPUT',@IsExistsOUT=@isexists OUTPUT        --不存在        IF(@IsExists = 'True')        BEGIN            --刪除鏈接            SET @sql = '            IF  EXISTS (SELECT srv.name FROM sys.servers srv WHERE srv.server_id != 0 AND srv.name = N'''+@linkname+''')            BEGIN            EXEC master.dbo.sp_dropserver @server=N'''+@linkname+''', @droplogins=''droplogins''            END'            EXEC(@sql)        END        SET @isexists = 'False'        FETCH NEXT FROM @itemCur INTO @linkname,@linkip,@linksa,@linkpassword    END     CLOSE @itemCur    DEALLOCATE @itemCurEND


 


三、注意事項(xiàng)


1.      進(jìn)行方式1與方式2的切換,需要如圖1、圖2的表字段名稱進(jìn)行修改,并且去存儲(chǔ)過(guò)程sp_CreateLink注釋方式1的代碼,恢復(fù)方式2的代碼;


2.      在需要修改表記錄之前需要先刪除所有鏈接服務(wù)器(執(zhí)行存儲(chǔ)過(guò)程sp_DropLink),再創(chuàng)建鏈接服務(wù)器;(執(zhí)行存儲(chǔ)過(guò)程sp_CreateLink); 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
通過(guò)作業(yè),定時(shí)同步兩個(gè)數(shù)據(jù)庫(kù)
導(dǎo)入/導(dǎo)出Excel-完全正確-推薦
SQL Server死鎖的分析
Sql經(jīng)典語(yǔ)句
sqlserver通過(guò)腳本創(chuàng)建定時(shí)任務(wù)
SQL SERVER 作業(yè)淺析
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服