ALTER PROC [futurema].[UpdageOrderDatasDistinguishResult]
AS
declare @connectionstring nvarchar(256)
declare @server nvarchar(256)
declare @uid nvarchar(256)
declare @pwd nvarchar(256)
declare @database nvarchar(256)
declare @svrlink nvarchar(50)
declare @sql nvarchar(1000)
declare @OrderID uniqueidentifier
--
DECLARE @OrderCount INT,@i INT,@DataCount INT,@DC int
SET @i=0
--定义存放受番号的临时表
declare @temp_PerOrders table(Orid uniqueidentifier,DataCount int, StoreDB nvarchar(max) )
--找到全部需要处理的受番号
INSERT INTO @temp_PerOrders(Orid ,DataCount, StoreDB )
SELECT OrderDatas.OrderID,
OrderDatas.DataCount,
StoreServers.AccessInformation
FROM FutureManagement_Manage.FutureMa.OrderDatas with(nolock)
INNER JOIN FutureManagement_Masters.FutureMa.StoreServers with(nolock)
ON OrderDatas.StoreServers.value('(/Ss/S[@type=2])[1]', 'int') = StoreServers.StoreServerID
WHERE MatterID =0 AND
FinishDateTime is null and
OrderDatas.OrderProperty.value('(/OP/DC)[1]', 'int') <> OrderDatas.DataCount
SELECT @OrderCount = COUNT(*) from @temp_PerOrders
IF @OrderCount=0
RETURN
WHILE @i<@OrderCount
BEGIN
SET ROWCOUNT @i
SELECT
@OrderID = Orid,
@DataCount = DataCount,
@connectionstring =StoreDB
FROM @temp_PerOrders
--print @OrderID
--print @connectionstring
----------------------------------------
declare @temp_ConnectInfo table
(
info nvarchar(50)
)
IF (@connectionstring is not null) and LEN (@connectionstring)> 0
BEGIN
INSERT INTO @temp_ConnectInfo
SELECT SUBSTRING(ConnectInfo,B.number,CHARINDEX(';',ConnectInfo+';',B.number)-B.number) AS info
FROM (SELECT @connectionstring ConnectInfo) OP
JOIN MASTER..spt_values AS B
ON B.type='p' AND B.number >0 AND SUBSTRING(';'+ConnectInfo,B.number,1)=';'
END
select @server = substring(info, charindex('=',info)+1,len(info) - charindex('=',info) ) from @temp_ConnectInfo where info like 'server%'
select @uid = substring(info, charindex('=',info)+1,len(info) - charindex('=',info) ) from @temp_ConnectInfo where info like 'uid%'
select @pwd = substring(info, charindex('=',info)+1,len(info) - charindex('=',info) ) from @temp_ConnectInfo where info like 'pwd%'
select @database = substring(info, charindex('=',info)+1,len(info) - charindex('=',info) ) from @temp_ConnectInfo where info like 'database%'
-----------------------------------------
begin try
set @svrlink = NEWID()
--创建链接服务器
exec sp_addlinkedserver @svrlink, ' ', 'SQLOLEDB ', @server
exec sp_addlinkedsrvlogin @svrlink, 'false',null, @uid, @pwd
EXEC sp_serveroption @svrlink, 'rpc', 'on'
EXEC sp_serveroption @svrlink, 'rpc out', 'on'
if (@@ROWCOUNT = 1)
begin
DECLARE @Description nvarchar(1000) ,
@DistinguishCount int
SET @sql = '
['+@svrlink+'].[FutureManagement_Procedure].[futurema].[GetDistinguishMatterType]
@OrderID= @OrderID,
@Description = @Description OUTPUT,
@DistinguishCount = @DistinguishCount OUTPUT
'
EXEC sp_executesql @sql,
N'@OrderID UNIQUEIDENTIFIER ,@Description nvarchar(1000) OUTPUT,@DistinguishCount int OUTPUT',
@OrderID ,
@Description OUTPUT,
@DistinguishCount OUTPUT
--print @OrderID
--print @Description
--print @DistinguishCount
UPDATE FutureManagement_Manage.FutureMa.OrderDatas
SET OrderProperty.modify('replace value of(/OP/DC[1]/text())[1] with sql:variable("@DistinguishCount")')
WHERE OrderID = @OrderID
UPDATE FutureManagement_Manage.FutureMa.OrderDatas
SET OrderProperty.modify('replace value of(/OP/DD[1]/text())[1] with sql:variable("@Description")')
WHERE OrderID = @OrderID
end
--删除链接服务器
exec sp_dropserver @svrlink,'droplogins'
end try
begin catch
----删除链接服务器
exec sp_dropserver @svrlink,'droplogins'
end catch
SET @i += 1
END