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 关系。 :)
我遇到这样的情况:
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 关系。 :)