2016-06-10 18 views
0

我有一個SQL Server數據庫和幾個目錄。SQL如何在SP中獲取所需的選擇內容

然後,我創建一個新的SP,將讓所有的系統目錄:

-- company 
SELECT [companyuid] 
     ,[masterentity] 
     ,[description] 
     ,[externalid] 
     ,[isactive] 
    FROM [dbo].[setup_company] 
WHERE [masterentity] = @masterentity 
AND isactive = 1 

-- park 
SELECT [parkuid] 
     ,[companyuid] 
     ,[description] 
     ,[externalid] 
     ,[isactive] 
    FROM [dbo].[setup_park] 
WHERE isactive = 1 

-- store 
SELECT [storeuid] 
     ,[parkuid] 
     ,[description] 
     ,[isactive] 
    FROM [dbo].[setup_store] 
WHERE isactive = 1 

-- family products 
SELECT [familyuid] 
     ,[description] 
     ,[isactive] 
    FROM [dbo].[setup_product_family] 
WHERE isactive = 1 

現在,我需要這個SP是靈活的,所以,我只能返回company目錄或companyusers

我正在考慮創建一個名爲catalogs的新表,並在那裏設置了我擁有的所有目錄,然後將一些規則附加到SP。

+0

看似複雜 - 爲什麼不只是通過4個布爾其指定返回 - 如果你真的懶之一包含你想要的名字的字符串。 – Hogan

回答

0

這樣做的另一種方式,

enum Flg 
{ 
Company=1, 
Park=2, 
Store=4, 
Family=8 
} 

你可以把只有一個變量在SP,但在這樣的變量傳遞值, 假設只有公司然後@ Flg = 1,公司和公園都是@ flg = 3,公司和家人只有@ Flg = 9。

瞭解這裏的概念,更重要的

然後在你的進程內,你可以像 寫測試,你可以通過在@Flg任何該死的價值。

Declare @Flg int=6 

SELECT [companyuid] 
     ,[masterentity] 
     ,[description] 
     ,[externalid] 
     ,[isactive] 
    FROM [dbo].[setup_company] 
WHERE [masterentity] = @masterentity 
AND isactive = 1 and (@Flg & 1=1) 
--union all 
-- park 
SELECT [parkuid] 
     ,[companyuid] 
     ,[description] 
     ,[externalid] 
     ,[isactive] 
    FROM [dbo].[setup_park] 
WHERE isactive = 1 and (@Flg & 2=2) 
--union all 
-- store 
SELECT [storeuid] 
     ,[parkuid] 
     ,[description] 
     ,[isactive] 
    FROM [dbo].[setup_store] 
WHERE isactive = 1 and (@Flg & 4=4) 
--union all 
-- family products 
SELECT [familyuid] 
     ,[description] 
     ,[isactive] 
    FROM [dbo].[setup_product_family] 
WHERE isactive = 1 and (@Flg & 8=8) 

這裏也可以存儲多個複選框值,其中類型不能超過10

2

添加額外PARAMS(如可調理u需要)

檢查使用如果如果塊應該被執行或不塊的條件。

下面是樣品

create proc 
    @masterentity int , 
    @iscompany smallint =0, 
    @ispark smallint =0 
    as 
    -- company 
    if (@iscompany <>0) 
    begin 
    SELECT [companyuid] 
      ,[masterentity] 
      ,[description] 
      ,[externalid] 
      ,[isactive] 
     FROM [dbo].[setup_company] 
    WHERE [masterentity] = @masterentity 
    AND isactive = 1 
    end 
    -- park 
    if (@ispark <>0) 
    begin 
    SELECT [parkuid] 
      ,[companyuid] 
      ,[description] 
      ,[externalid] 
      ,[isactive] 
     FROM [dbo].[setup_park] 
    WHERE isactive = 1 
    end 
+0

發送一個參數如「1,2,3,4,5」,其中1 =公司,2 =公園等? – VAAA

+0

在這種情況下,我們必須拆分param值並檢查... –

相關問題