存儲過程例子

 

 

 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章