我想修改我主服务器(A)密码,然后自动的进行跟主服务器所链接的服务器(B)上的链接密码为我主服务器的最新密码。现我想先判断B是否跟A网络相通,如果是连通的话就判断B是否可以取到我A上的数据,如果取得到就不用修改,如果取不到就自动的修改链接密码。请问如何用Transact-SQL语句实现?
  还有B服务器有不少于300台,如何进行批量化的操作?

解决方案 »

  1.   

    直接用sp_addlinkedsrvlogin 修改
    如果不通会提示失败,这个时候继续让它往下一步走。
      

  2.   

    把sp_addlinkedsrvlogin 语句写到文件里,
    然后写个bat , bat里使用SQLCMD 批量执行(300台 小意思)
      

  3.   

    sp_addlinkedsrvlogin
    创建或更新本地 Microsoft® SQL Server™ 实例上的登录与链接服务器上远程登录之间的映射。语法
    sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'
        [ , [ @useself = ] 'useself' ]
        [ , [ @locallogin = ] 'locallogin' ]
        [ , [ @rmtuser = ] 'rmtuser' ]
        [ , [ @rmtpassword = ] 'rmtpassword' ]参数
    [@rmtsrvname =] 'rmtsrvname'是应用登录映射的链接服务器名称。rmtsrvname 的数据类型为 sysname,没有默认设置。[@useself =] 'useself'决定用于连接到远程服务器的登录名称。useself 的数据类型为 varchar(8),默认设置为 TRUE。true 值指定 SQL Server 验证的登录使用其自己的凭据以连接到 rmtsrvname,而忽略 rmtuser 和 rmtpassword 参数。false 值指定 rmtuser 和 rmtpassword 参数用来连接到特定 locallogin 的 rmtsrvname。如果 rmtuser 和 rmtpassword 也设置为 NULL,则连接链接服务器不需使用任何登录或密码。对于 Windows NT 身份验证登录而言,useself 为 true 则无效,除非 Microsoft Windows NT® 环境支持安全帐户委托,并且,提供程序支持 Windows 身份验证(此时不再需要创建值为 true 的映射,不过创建仍然有效)。[ @locallogin =] 'locallogin'本地服务器上的登录。locallogin 的数据类型为 sysname,默认设置为 NULL。NULL 值指定此条目将应用于所有连接到 rmtsrvname 的本地登录。如果值不为 NULL,则 locallogin 可以是一个 SQL Server 登录或 Windows NT 用户。必须授予 Windows NT 用户直接访问 SQL Server 或通过其作为已授予访问权限的组的成员来访问 SQL Server 的权限。[@rmtuser =] 'rmtuser'当 useself 为 false 时,用来连接 rmtsrvname 的用户名,rmtuser 的数据类型为 sysname,默认设置为 NULL。[@rmtpassword =] 'rmtpassword'与 rmtuser 相关的密码。rmtpassword 的数据类型为 sysname,默认设置为 NULL。返回代码值
    0(成功)或 1(失败)注释
    当用户登录到本地服务器并执行分布式查询,以访问链接服务器上的表时,本地服务器必须登录链接服务器上,代表该用户访问该表。使用 sp_addlinkedsrvlogin 来指定本地服务器登录链接服务器的登录凭据。本地服务器上所有登录和链接服务器上的远程登录之间的默认映射通过执行 sp_addlinkedserver 自动创建。默认映射说明连接到链接服务器代表的登录时,SQL Server 使用本地登录的用户凭据(等同于将链接服务器的 @useself 设置为 true 时执行 sp_addlinkedsrvlogin)。使用 sp_addlinkedsrvlogin 只可以更改特定的本地服务器的默认映射或添加新映射。若要删除默认映射或任何其它映射,请使用 sp_droplinkedsrvlogin。当所有下列条件存在时,SQL Server 可以自动地使用正在发出查询的用户的 Windows NT 安全凭据(Windows NT 用户名称和密码),以连接到链接服务器,而不是必须使用 sp_addlinkedsrvlogin 创建一个预设的登录映射。 使用 Windows 身份验证模式,用户连接到 SQL Server。
    在客户端和发送服务器上安全帐户委托是可用的。
    提供程序支持 Windows 身份验证模式(例如,运行于 Windows NT 上的 SQL Server)。 
    使用映射(此映射通过在本地 SQL Server 上执行 sp_addlinkedsrvlogin 定义)的链接服务器执行身份验证后,远程数据库中单独对象的权限由链接服务器决定,而不是由本地服务器决定。不能从用户定义的事务中执行 sp_addlinkedsrvlogin。权限
    只有 sysadmin 和 securityadmin 固定服务器角色的成员才可以执行 sp_addlinkedsrvlogin。示例
    A. 使用各自的用户凭据将所有本地登录连接到链接服务器
    此示例创建一个映射,以确保所有到本地服务器的登录都使用其各自的用户凭据连接到链接服务器 Accounts。EXEC sp_addlinkedsrvlogin 'Accounts'或EXEC sp_addlinkedsrvlogin 'Accounts', 'true'B. 使用指定的用户和密码将所有本地登录连接到链接服务器
    此示例创建一个映射,以确保所有到本地服务器的登录都使用相同的登录 SQLUser 和密码 Password 连接到链接服务器 Accounts。EXEC sp_addlinkedsrvlogin 'Accounts', 'false', NULL, 'SQLUser', 'Password'C. 不使用任何用户凭据将所有本地登录连接到链接服务器
    此示例创建一个映射,以确保所有到本地服务器的登录都连接到链接服务器 mydb,而不使用登录或密码(mydb 不需要登录或密码)。EXEC sp_addlinkedsrvlogin 'mydb', 'false', NULL, NULL, NULL-或-EXEC sp_addlinkedsrvlogin 'mydb', 'false'D. 使用不同的用户凭据将特定的登录连接到链接服务器
    此示例创建一个映射,以确保只有 Windows NT 用户 Domain\Mary 使用登录 MaryP 和密码 NewPassword 连接到链接服务器 Accounts。EXEC sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', 'NewPassword'E. 将特定的登录连接到 Excel 电子表格(链接服务器)
    此示例首先创建一个名为 ExcelSource 的链接服务器,定义为 Microsoft Excel 电子表格 DistExcl.xls,然后创建一个映射以允许 SQL Server 登录 sa 使用 Excel 登录 Admin 连接到 ExcelSource,并且没有密码。EXEC sp_addlinkedserver 'ExcelSource', 'Jet 4.0',
       'Microsoft.Jet.OLEDB.4.0',
       'c:\MyData\DistExcl.xls',
       NULL,
       'Excel 5.0'
    GO
    EXEC sp_addlinkedsrvlogin 'ExcelSource', 'false', 'sa', 'Admin', NULL
      

  4.   

    不管三七二一,全部统一的删除/重建linkserver不就行了.
    省去了测试物理链接是否连通的步骤.
      

  5.   

    有没有什么可以让它自己判断执行的方法?还有一个问题是,链接只是单向的B链接到A,而A上并没有B的链接。现在我是要修改A的密码,让一连串的B自动的修改它的链接密码。