0

我想结合两个不同的谓词函数。

情况如下:

  1. 我有第一个谓词函数,它使用配置表(我们称之为 conf_table)来过滤另一个表(TYP_CUSTOMER 列上的 customer_table)。

如果 USER_ID 在部门 'A' (DEPT ='A'),他有权查看客户类型 '1' (TYP_CUSTOMER = '1')

conf_table

用户身份 部门 国家
多多 一个 澳大利亚
TITI 印度

客户表

客户ID TYP_CUSTOMER 国家
001 1 澳大利亚
002 2 印度
003 2 澳大利亚
004 1 摩洛哥
CREATE FUNCTION dbo.first_predicate_fn(@TYP_CUSTOMER)
RETURNS TABLE
WITH SCHEMABINDING
AS RETURN (SELECT 1 AS RESULT FROM dbo.conf_table c
          WHERE c.USER_ID = USER_NAME() 
          AND (CASE WHEN c.DEPT = 'A' THEN '1' ELSE NULL END = @TYP_CUSTOMER)
GO
CREATE SECURITY POLICY secpol_first
ADD FILTER PREDICATE dbo.first_predicate_fn(TYP_CUSTOMER)
ON dbo.customer_table 
WITH (STATE = ON)

USER_ID = 'TOTO' 的预期结果

客户ID TYP_CUSTOMER 国家
001 1 澳大利亚
004 1 摩洛哥
  1. 第二个谓词函数可以过滤同一国家的所有客户。
CREATE FUNCTION dbo.second_predicate_fn(@CUSTOMER_ID)
RETURNS TABLE
WITH SCHEMABINDING
AS RETURN (SELECT 1 AS RESULT FROM dbo.customer_table cust INNER JOIN 
          dbo.conf_table conf
          ON cust.COUNTRY= conf.COUNTRY
          WHERE CUSTOMER_ID = @CUSTOMER_ID
GO
CREATE SECURITY POLICY secpol_second
ADD FILTER PREDICATE dbo.second_predicate_fn(CUSTOMER_ID )
ON dbo.customer_table 
WITH (STATE = ON)

USER_ID = 'TOTO' 的预期结果

客户ID TYP_CUSTOMER 国家
001 1 澳大利亚
003 2 澳大利亚

所以最后,我需要将两者结合起来以获得以下最终结果:

客户ID TYP_CUSTOMER 国家
001 1 澳大利亚
003 2 澳大利亚
004 1 摩洛哥

非常感谢您的帮助!

4

0 回答 0