获取患者主索引的所有指定域的患者标识

 
  
ALTER PROCEDURE [ dbo ] . [ pGetPersonIdentifiers ] (
@identifierRootId int , @identifier varchar ( 100 ), @personId int = - 1
)

AS

set nocount on
BEGIN TRY
IF NOT EXISTS ( SELECT * FROM [ tempdb ] .sys.objects WHERE name = ' ##PersonIdentifier ' )
CREATE TABLE ##PersonIdentifier(
[ PersonId ] [ int ] ,
[ IdentifierRootID ] [ int ] ,
[ Identifier ] [ varchar ] ( 100 ) NOT NULL
)
IF NOT EXISTS ( SELECT * FROM [ tempdb ] .sys.objects WHERE name = ' ##relativePersonId ' )
CREATE TABLE ##relativePersonId(
[ RID ] [ int ] identity ( 1 , 1 ),
[ RelatedPersonId ] [ int ] ,
[ IsHandled ] [ bit ] NOT NULL default 0
)
if @personId = - 1
SELECT @personId = PersonId
FROM PersonIdentifier with (nolock) WHERE IdentifierRootId = @identifierRootId AND Identifier = @identifier

INSERT ##PersonIdentifier(PersonId, IdentifierRootId, Identifier)
SELECT PersonId, IdentifierRootId, Identifier
FROM PersonIdentifier with (nolock) WHERE IdentifierRootId = @identifierRootId AND PersonId = @personId

INSERT ##relativePersonId(RelatedPersonId)
SELECT convert ( int , Identifier)
FROM PersonIdentifier with (nolock)
WHERE IdentifierRootId = 100 AND PersonId = @personId AND Identifier <> @identifier
and convert ( int , Identifier) not in ( select RelatedPersonId from ##relativePersonId)

INSERT ##relativePersonId(RelatedPersonId)
SELECT PersonId
FROM PersonIdentifier with (nolock)
WHERE PersonId <> @personID AND IdentifierRootId = 100 AND Identifier = convert ( varchar ( 100 ), @personId )
and PersonId not in ( select RelatedPersonId from ##relativePersonId)

DECLARE @relatedPersonId int , @rid int
declare @relatedPersonIdentifier varchar ( 100 )
SET @relatedPersonIdentifier = convert ( varchar ( 100 ), @personId )
SELECT TOP 1 @rid = RID, @relatedPersonId = RelatedPersonId FROM ##relativePersonId WHERE IsHandled = 0
IF @relatedPersonId IS NOT NULL
begin
update ##relativePersonId set IsHandled = 1 where RID = @rid
exec [ dbo ] . [ pGetPersonIdentifiers ] @identifierRootId , @relatedPersonIdentifier , @relatedPersonId
end
ELSE
begin
SELECT * FROM ##PersonIdentifier
DROP TABLE ##PersonIdentifier
DROP TABLE ##relativePersonId
end
END TRY

BEGIN CATCH
IF EXISTS ( SELECT * FROM [ tempdb ] .sys.objects WHERE name = ' ##PersonIdentifier ' )
DROP TABLE ##PersonIdentifier
IF EXISTS ( SELECT * FROM [ tempdb ] .sys.objects WHERE name = ' ##relativePersonId ' )
DROP TABLE ##relativePersonId
END CATCH

set nocount off

 

转载于:https://www.cnblogs.com/chriskwok/archive/2010/03/20/1690421.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值