2016-06-10 47 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值并检查... –

相关问题