1.在企业管理器中配置好linkedserver,并确认该linkedserver可以执行如下语句:
INSERT INTO OPENQUERY(srv_lnk,'select strSSN, strProductType from S_SSNInfo where 1=2')
values ('just test','test just')
2.将存储过程中对linkedserver的插入语句改成如上的语句.
INSERT INTO OPENQUERY(srv_lnk,'select strSSN, strProductType from S_SSNInfo where 1=2')
values (@NRNDSSN, @NProductType)
sp_addlinkedserver
创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为 Microsoft® SQL Server™,则可执行远程存储过程。
要添加为链接服务器的 OLE DB 数据源的产品名称。product_name 的数据类型为 nvarchar(128),默认设置为 NULL。如果是 SQL Server,则不需要指定 provider_name、data_source、location、provider_string 以及目录。
[ @provider = ] 'provider_name'
与此数据源相对应的 OLE DB 提供程序的唯一程序标识符 (PROGID)。provider_name 对于安装在当前计算机上指定的 OLE DB 提供程序必须是唯一的。provider_name 的数据类型为nvarchar(128),默认设置为 NULL。OLE DB 提供程序应该用给定的 PROGID 在注册表中注册。
[ @datasrc = ] 'data_source'
由 OLE DB 提供程序解释的数据源名称。data_source 的数据类型为 nvarchar(4000),默认设置为 NULL。data_source 被当作 DBPROP_INIT_DATASOURCE 属性传递以便初始化 OLE DB 提供程序。
当链接的服务器针对于 SQL Server OLE DB 提供程序创建时,可以按照 servername\instancename 的形式指定 data_source,它可以用来连接到运行于特定计算机上的 SQL Server 的特定实例上。servername 是运行 SQL Server 的计算机名称,instancename 是用户将被连接到的特定 SQL Server 实例的名称。
[ @location = ] 'location'
OLE DB 提供程序所解释的数据库的位置。location 的数据类型为 nvarchar(4000),默认设置为 NULL。location 作为 DBPROP_INIT_LOCATION 属性传递以便初始化 OLE DB 提供程序。
[ @provstr = ] 'provider_string'
OLE DB 提供程序特定的连接字符串,它可标识唯一的数据源。provider_string 的数据类型为 nvarchar(4000),默认设置为 NULL。Provstr 作为 DBPROP_INIT_PROVIDERSTRING 属性传递以便初始化 OLE DB 提供程序。
当针对 Server OLE DB 提供程序提供了链接服务器后,可将 SERVER 关键字用作 SERVER=servername\instancename 来指定实例,以指定特定的 SQL Server 实例。servername 是 SQL Server 在其上运行的计算机名称,instancename 是用户连接到的特定的 SQL Server 实例名称。
[ @catalog = ] 'catalog'
建立 OLE DB 提供程序的连接时所使用的目录。catalog 的数据类型为sysname,默认设置为 NULL。catalog 作为 DBPROP_INIT_CATALOG 属性传递以便初始化 OLE DB 提供程序。
DECLARE @NnumIndex INT, @NRNDSSN NVARCHAR(50), @NProductType NVARCHAR(2)
DECLARE TempCursor1 CURSOR LOCAL FORWARD_ONLY STATIC OPTIMISTIC FOR SELECT a.numIndex, a.strRNDSSN, b.strProductType FROM tblSFIS_SI_Shipping_Detailed a INNER JOIN tblSFIS_SI_KeyPartProgram b ON a.strMoNo = b.strMONo WHERE numCopyID = 0
OPEN TempCursor1
FETCH NEXT FROM TempCursor1 INTO @NnumIndex, @NRNDSSN, @NProductType
WHILE (@@FETCH_STATUS = 0)
BEGIN
INSERT INTO srv_lnk.www_memoright_com.dbo.S_SSNInfo (strSSN, strProductType) VALUES (@NRNDSSN, @NProductType)
UPDATE tblSFIS_SI_Shipping_Detailed SET numCopyID = 1 WHERE numIndex = @NnumIndex
FETCH NEXT FROM TempCursor1 INTO @NnumIndex, @NRNDSSN, @NProductType
END
CLOSE TempCursor1
DEALLOCATE TempCursor1
--GO