CREATE TYPE [dbo].[IntListType] AS TABLE([Number] [int] NULL)
DECLARE @ids as IntListType;
DECLARE @TempIds as IntListType;
形勢
我有這需要在存儲過程中被過濾的產品很長的名單。該過濾器以用戶定義的表格類型提供,每個過濾器可以爲空或全部。我試圖爲此創建一個查詢,但如果其中一個過濾器爲空,它將不起作用。
所以我決定創建另一個用戶自定義表格類型,它只包含列:Number。
然後,對於每個過濾器類型,將請檢查是否是空 IF (select filterName from @customtable) is not null
如果是這樣,它會查詢產品標識的相匹配的名字,其並將其添加到號碼列表。
如果下一個過濾器不是空的,它會將該ID添加到臨時表中,該臨時表又將與第一個表結合。
到目前爲止,我發現這是處理過濾器是否爲空的最有效方法。無論如何,它會得到我需要的ID!現在
,每一個過濾器最終將藉此在下面的代碼:
IF (select count(*) from @ids) > 0
BEGIN
IF(select count(*) from @TempIds)
BEGIN
delete from @ids
where Number not in
(select C.Number
from @ids C
inner join @TempIds T on C.Number = T.Number)
END
END
ELSE
BEGIN
insert into @ids
select * from @TempIds
END
delete from @TempIds
問題
我正在尋找一種方式來實現最後命名代碼到存儲過程中這使我回IntListType的列表。然而,我每次執行的@ids(declare @ids as IntListType) can't be set. (asin
set @ids = @TempIds'>會抱怨'必須聲明標量變量@ids'以及'@TempIds')
我該如何解決這個問題?
嘗試
我已經嘗試過的所有的每個表結合了內部聯接,外連接和其他連接..但絕不是我會得到相同的結果時,任何(或全部跳過此)的過濾器是空的。
據我所見,這是有效提高每種過濾器類型的唯一方法,如果不是,則檢查它們是否爲空;處理結果等等
添加的額外代碼 –
我沒有看到一個函數如何返回一個列表,之後是相同的列表可以通過函數再次改變。 –