SQL - 在 Store 过程中使用参数调用函数

SQL - Call function with parameters within a Store procedure

我遇到这样的情况:

SELECT CONVERT(VARCHAR(40), CONVERT(BIGINT, C1.cod_cta)), 
       C1.cod_cta, 
       C1.descripcio 
FROM   table1 C1 
       JOIN (SELECT TOP 1 * 
             FROM   table2 
             ORDER  BY [date] DESC) C2 
         ON C2.somefield = 'SomeData' 
WHERE  C1.something = 1 
UNION ALL 
SELECT CONVERT(VARCHAR(40), CONVERT(BIGINT, C1.cod_cta)), 
       C1.cod_cta, 
       C1.descripcio 
FROM   table3 C1 
       JOIN (SELECT TOP 1 * 
             FROM   table2 
             ORDER  BY [date] DESC) C2 
         ON C2.somefield = 'SomeData' 
WHERE  C1.something = 1 
       AND NOT EXISTS (SELECT 1 
                       FROM   table1 C3 
                       WHERE  C3.cod_cta = C1.cod_cta) 
UNION ALL 
SELECT CONVERT(VARCHAR(40), CONVERT(BIGINT, C1.cod_cta)), 
       C1.cod_cta, 
       C1.descripcio 
FROM   table3 C1 
       JOIN (SELECT TOP 1 * 
             FROM   table2 
             ORDER  BY [date] DESC) C2 
         ON C2.somefield = 'SomeData' 
WHERE  C1.something = 1 
UNION ALL 
SELECT C1.importantfield COLLATE latin1_general_bin, 
       C1.importantfield COLLATE latin1_general_bin, 
       C1.desc_cuenta COLLATE latin1_general_bin 
FROM   table4 C1 
       JOIN (SELECT TOP 1 * 
             FROM   table2 
             ORDER  BY [date] DESC) C2 
         ON C2.somefield = 'SomeData'  

而且我需要修改 de last Select:

SELECT C1.importantfield COLLATE latin1_general_bin, 
       C1.importantfield COLLATE latin1_general_bin, 
       C1.desc_cuenta COLLATE latin1_general_bin 
FROM   table4 C1 
       JOIN (SELECT TOP 1 * 
             FROM   table2 
             ORDER  BY [date] DESC) C2 
         ON C2.somefield = 'SomeData' 

字段 "ImportantField" 可能有也可能没有掩码。所以,我做了一个函数来删除面具,如果它正在使用的话。我的问题是如何在 select 中调用该函数。该函数需要一些参数才能工作。这些参数是来自另一个 table 的数据。我在另一个 table 中注册了 "ImportantField" 是否使用了面具。所以,用 SQL 的话来说,我需要这样的东西,但工作 ;)

SELECT C1.importantfield COLLATE latin1_general_bin, 
       dbo.Removemask(C1.importantfield, (SELECT parameter1 
                                          FROM   table5), (SELECT parameter2 
                                                           FROM   table5), (SELECT parameter3 
                                                                            FROM table5)) COLLATE latin1_general_bin,
       C1.desc_cuenta COLLATE latin1_general_bin 
FROM   table4 C1 
       JOIN (SELECT TOP 1 * 
             FROM   table2 
             ORDER  BY [date] DESC) C2 
         ON C2.somefield = 'SomeData' 

我从中获取参数的 table 只有行。

有什么办法可以做到这一点吗?

提前致谢!!!

PS:我在SQL中真的很菜鸟,请多多关照。

由于table5 只包含一条记录,您可以将它加入您的查询而不影响结果。这样可以轻松访问参数值。
请参见下面的示例:

SELECT importantfieldOriginal = C1.importantfield COLLATE latin1_general_bin, 
       importantfieldWithOutMask = dbo.Removemask(C1.importantfield, table5.parameter1 , table5.parameter2, table5.parameter2)  COLLATE latin1_general_bin, 
       C1.desc_cuenta COLLATE latin1_general_bin 
FROM   table4 C1 
       JOIN (SELECT TOP 1 * 
             FROM   table2 
             ORDER  BY [date] DESC) C2 
         ON C2.somefield = 'SomeData' 
INNER JOIN table5 ON 1 = 1 

"1 = 1" 伪造 table4 和 table5 之间的关系,因为 table5 只包含一条记录,所以它就像一个 1:1 关系。 :)