2017-06-14 185 views
0

是否可以重寫這段SQL代碼?如何從sql數據庫中選擇多個角色?

在這種情況下,用戶被分配到多個角色。我希望所有ArrangemangID的用戶在一個列表中的不同角色。

我要重構這些行硬編碼的@rollx ...

(kk_aj_tbl_Arrangemang.KonstformID = @roll1) OR 

如果這是可能的嗎?

以下是我現有的代碼...

SELECT kk_aj_tbl_Arrangemang.ArrID, 
     kk_aj_tbl_Arrangemang.Datum, 
     (SELECT TOP (1) kk_aj_tbl_content.Rubrik 
     FROM kk_aj_tbl_content 
     INNER JOIN kk_aj_tbl_arridtoContent ON kk_aj_tbl_content.Contentid = kk_aj_tbl_arridtoContent.contentid 
     WHERE (kk_aj_tbl_arridtoContent.arrid = kk_aj_tbl_Arrangemang.ArrID AND 
       kk_aj_tbl_arridtoContent.Version = 1 
      ) 
     ) AS Rubrik, 
     (SELECT TOP (1) kk_aj_tbl_content_1.Underrubrik 
     FROM kk_aj_tbl_content AS kk_aj_tbl_content_1 
     INNER JOIN kk_aj_tbl_arridtoContent AS kk_aj_tbl_arridtoContent_1 ON kk_aj_tbl_content_1.Contentid = kk_aj_tbl_arridtoContent_1.contentid 
     WHERE (kk_aj_tbl_arridtoContent_1.arrid = k_aj_tbl_Arrangemang.ArrID AND 
       kk_aj_tbl_arridtoContent_1.Version = 1 
      ) 
     ) AS UnderRubrik, 
     kk_aj_tbl_Arrangemang.Publicerad, 
     kk_aj_tbl_Arrangemang.LookedAt, 
     kk_aj_tbl_ArrangemangStatus.ArrangemangStatus, 
     kk_aj_tbl_Arrangemangtyp.arrangemangtyp, 
     kk_aj_tbl_Konstformtyp.konstform, 
     kk_aj_tbl_utovare.Organisation, 
     Users.Username 
FROM kk_aj_tbl_Arrangemang 
INNER JOIN kk_aj_tbl_utovare ON kk_aj_tbl_Arrangemang.UtovarID = kk_aj_tbl_utovare.UtovarID 
INNER JOIN kk_aj_tbl_ArrangemangStatus ON kk_aj_tbl_Arrangemang.ArrangemangStatusID = kk_aj_tbl_ArrangemangStatus.ArrangemangStatusID 
INNER JOIN kk_aj_tbl_Konstformtyp ON kk_aj_tbl_Arrangemang.KonstformID = kk_aj_tbl_Konstformtyp.KonstformID 
INNER JOIN kk_aj_tbl_Arrangemangtyp ON kk_aj_tbl_Arrangemang.ArrangemangstypID = kk_aj_tbl_Arrangemangtyp.ArrangemangstypID 
INNER JOIN Users ON kk_aj_tbl_Arrangemang.AdminuserID = Users.UserID 
WHERE (kk_aj_tbl_ArrangemangStatus.ArrangemangStatusID = @arrStatusTyp) 
AND (kk_aj_tbl_Arrangemang.VisningsPeriod = @visningsperiod) 
AND ((kk_aj_tbl_Arrangemang.KonstformID = @roll1) OR 
    (kk_aj_tbl_Arrangemang.KonstformID = @roll2) OR 
    (kk_aj_tbl_Arrangemang.KonstformID = @roll3) OR 
    (kk_aj_tbl_Arrangemang.KonstformID = @roll4) OR 
    (kk_aj_tbl_Arrangemang.KonstformID = @roll5) OR 
    (kk_aj_tbl_Arrangemang.KonstformID = @roll6) OR 
    (kk_aj_tbl_Arrangemang.KonstformID = @roll7) OR 
    (kk_aj_tbl_Arrangemang.KonstformID = @roll8) OR 
    (kk_aj_tbl_Arrangemang.KonstformID = @roll9) OR 
    (kk_aj_tbl_Arrangemang.KonstformID = @roll10) 
    ) 
+0

您正在使用什麼數據庫? –

+0

我使用mssql。 – theonealf

+0

你的問題被標記爲「sql-server」,你可以將其更改爲mysql嗎? –

回答

0

我想你可能會尋找IN操作:

...AND kk_aj_tbl_Arrangemang.KonstformID IN (@roll1, @roll2, [email protected]) 
+0

我會測試一下。謝謝。是否可以將數組傳遞給存儲過程?所以我可以跳過所有的@roll變量。並且只傳遞一個var。 – theonealf

+0

SQL Server沒有數組數據類型,但是如果您的sql客戶端支持它(客戶端,如ado.net支持它),則可以將表值參數傳遞給存儲過程。 –

+0

我發現這篇文章http://www.sommarskog.se/arrays-in-sql.html它談到的表值參數(TVP)和功能,可以幫助在這種情況下。 Thx爲所有幫助! – theonealf