2014-12-23 53 views
1

我有四個精密組件問題在SQL Server多個遊標

表tbLicence
  • AGENTID
  • LicenceNumber
  • LineOfAuthority
  • 管轄權

讓我們說我有一個記錄具有以下值

  • AGENTID = 307
  • LicenceNumber = 245678
  • LineOfAuthority = 「牙科服務,個人險種,險」
  • 管轄權= 「阿拉巴馬州,紐約」

...

...

我相若方式有其他記錄有着不同的價值觀在此表

注意LineOfAuthority和管轄權包含由逗號分隔的多個值「」。

如果我將傳遞參數

  • @AgentId = 307
  • @LineOfAuthority = 「險」
  • @Jurisdiction = 「紐約」

然後輸出應該

LicenceNumber = 245678

我已存儲過程如下

ALTER PROCEDURE [dbo].[prLicenceFetchForAgentId] 

@LineOfAuthority nvarchar(max), 
@Jurisdiction nvarchar(max), 
@AgentId int 

AS 
Create table #tbLOA (
LOA nvarchar(max) 
); 

create table #tbtempJuris(
Jurisdiction nvarchar(max) 
); 

Insert into #tbLOA(LOA) Select LineOfAuthority from tbLicence where AgentId [email protected]; 
Insert into #tbtempJuris(Jurisdiction) Select Jurisdiction from tbLicence where AgentId [email protected]; 

DECLARE @LOASubString varchar(100); 
DECLARE @JurisdictionSubString varchar(100); 

-- first cursor 

DECLARE @MyCursor CURSOR 
SET @MyCursor = CURSOR FAST_FORWARD 
FOR 
Select LOA FROM #tbLOA 
OPEN @MyCursor 
FETCH NEXT FROM @MyCursor 
INTO @LOASubString 

WHILE @@FETCH_STATUS = 0 
BEGIN 
-- second cursor 

DECLARE @MyCursor2 CURSOR 
SET @MyCursor2 = CURSOR FAST_FORWARD 
FOR 
Select LOA FROM #tbLOA 
OPEN @MyCursor2 
FETCH NEXT FROM @MyCursor2 
INTO @JurisdictionSubString 

WHILE @@FETCH_STATUS = 0 
BEGIN 
--second code 

if(@LOASubString = @LineOfAuthority and @JurisdictionSubString = @Jurisdiction) 
begin 
Select LicenceNumber from tbLicence where LineOfAuthority = @LOASubString 
and [email protected] and AgentId [email protected]; 
break; 
end 

FETCH NEXT FROM @MyCursor2 
INTO @JurisdictionSubString 

END 

CLOSE @MyCursor2 
DEALLOCATE @MyCursor2 

--end cursor 2 

FETCH NEXT FROM @MyCursor 
INTO @LOASubString 

END 

CLOSE @MyCursor 
DEALLOCATE @MyCursor 

現在我無法得到正確的結果......它沒有表現出任何許可證號...... 請幫助我!

回答

2

首先,在一列中有多個值對數據庫設計的第一範式和應避免不惜一切代價!

其次,我不明白您正在使用兩個嵌套的光標做地球上什麼?!?!?!?

這似乎是一個非常簡單的,單一的SELECT聲明:

SELECT 
    LicenceNumber 
FROM 
    dbo.tbLicence 
WHERE 
    AgentId = @AgentId 
    AND LineOfAuthority LIKE '%' + @LineOfAuthority + '%' 
    AND Jurisdiction = LIKE '%' + @Jurisdiction + '%'; 
+0

你是絕對正確的,先生......其實具有單列多個值的想法是不是我的主意。這是由其他devolper完成的...非常感謝先生... – Nida