当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    SQLServer2008新实例远程数据库链接问题(sp

    栏目:win服务器问题汇总 时间:2019-10-15 15:29

    先说说问题起因:

    测试同学在自己电脑上测试不同的后台,但数据库使用的是相同的名称。

    于是创建了新的SQL Server实例,而新实例需要指定不同端口才能启动,改端口后执行sp_addlinkedserver语句后,连接测试不成功。

    执行的SQL语句如下:

    EXEC master.dbo.sp_addlinkedserver @server = N'UserDBLink', @srvproduct=N'UserDBLink', @provider=N'SQLNCLI', @datasrc=N'(LOCAL)', @catalog=N'UsersDB'
     /* For security reasons the linked server remote logins password is changed with ######## */
    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'UserDBLink',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

    先说下问题的解决方案,需要在@datasrc字串中加入端口号,如下:

    @datasrc=N'(LOCAL)'修改为@datasrc=N'(LOCAL),端口号'

    很简单吧!但,但,但确查了好久,最后还是想到程序中连接字符串用法,才解决了该问题。
    程序中链接串是这样的

    Provider=SQLOLEDB.1;Password=11;Persist Security Info=True;User ID=sa;Initial Catalog=db;Data Source=127.0.0.1,1433;

    在查找问题过程中,查了MSDN文档,居然没有写新端口的写法,难怪该妹妹折腾了好久!,大家帮我看看,难道我错怪MSDN了嘛!!!

    这是链接:https://msdn.microsoft.com/zh-cn/library/ms190479.aspx

    这是我复制的MSDN描述

    sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]  
       [ , [ @provider= ] 'provider_name' ] 
       [ , [ @datasrc= ] 'data_source' ]  
       [ , [ @location= ] 'location' ]  
       [ , [ @provstr= ] 'provider_string' ]  
       [ , [ @catalog= ] 'catalog' ]

    参数:

    [ @server= ] 'server'

    要创建的链接服务器的名称。 server 的数据类型为 sysname,无默认值。 

    [ @srvproduct= ] 'product_name'

    要添加为链接服务器的 OLE DB 数据源的产品名称。 库是nvarchar (128),默认值为 NULL。 如果SQL Server, provider_name, data_source,位置, provider_string,和目录无需指定。

    [ @provider= ] 'provider_name'

    与此数据源对应的 OLE DB 访问接口的唯一编程标识符 (PROGID)。 provider_name必须是唯一的当前计算机上安装指定的 OLE DB 提供程序。 provider_name是nvarchar (128),默认值为 NULL; 但是,如果provider_name是省略,则使用 SQLNCLI。 (使用 SQLNCLI 并且 SQL Server 将重定向到 SQL Server Native Client OLE DB 访问接口的最新版本。)OLE DB 访问接口应以指定的 PROGID 在注册表中注册。 

    [ @datasrc= ] 'data_source'

    由 OLE DB 访问接口解释的数据源的名称。 data_source是nvarchar (4000)。 data_source作为要初始化的 OLE DB 访问接口的 DBPROP_INIT_DATASOURCE 属性传递。

    [ @location= ] 'location'

    由 OLE DB 访问接口解释的数据库的位置。 位置是nvarchar (4000),默认值为 NULL。 位置作为要初始化的 OLE DB 访问接口的 DBPROP_INIT_LOCATION 属性传递。 

    [ @provstr= ] 'provider_string'

    OLE DB 访问接口特定的连接字符串,它可标识唯一的数据源。 provider_string是nvarchar (4000),默认值为 NULL。 provstr传递给 IDataInitialize,或者设置为 DBPROP_INIT_PROVIDERSTRING 属性来初始化 OLE DB 访问接口。