SQL结果的列值为结果集中需要执行返回的UDF名称
Column value of an SQL result is the name of a UDF that needs to be executed and returned in the result set
我想查询我的数据库和return一个table。
- 我的 table 包含一个包含用户定义函数名称的列。
- 我想执行 UDF 列的值,return它的结果作为查询结果集中的一个列。
TblContainers
ID
UID
ContainerType
Size
UDF
1
XXX
Chest
HUGE
udf_GetChestCount
2
YYY
Tube
SMALL
udf_GetTubeCount
3
XXX
Box
TINY
udf_GetBoxCount
我想要的结果集应该是这样的:
ID
ContainerType
Size
Container COUNT
1
Chest
HUGE
13 (count obtained by calling udf_GetChestCount)
3
Box
TINY
11 (count obtained by calling udf_GetBoxCount)
每一行都会有自己的 UDF 来调用以获得容器计数。
我不确定如何做最后一部分。
我正在尝试执行以下操作(@uid = 'XXX ')
SELECT ID, ContainerType, Size, (EXEC(UDF)(@uid) AS [ContainerCount]
FROM TblContainers WHERE UID=@uid
但这对我不起作用。我将如何构建一个 return 我需要的查询?
我最终使用了 CASE 语句,并按照 Peter Mith 和 Stu 的建议直接调用函数。谢谢大家
CREATE FUNCTION [dbo].[udf_GetContainerCounts](@uid VARCHAR(30))
DECLARE @v_ID numeric;
SET @v_UID = 'XXX';
SELECT ID, ContainerType, Size, UID,
CASE
WHEN ContainerType = 'CHEST' THEN (call UDF)
WHEN ContainerType = 'TUBE' THEN (call UDF)
WHEN ContainerType = 'BOX' THEN (call UDF)
ELSE 0
END AS [ContainerCount]
FROM TBLContainers;
我想查询我的数据库和return一个table。
- 我的 table 包含一个包含用户定义函数名称的列。
- 我想执行 UDF 列的值,return它的结果作为查询结果集中的一个列。
TblContainers
ID | UID | ContainerType | Size | UDF |
---|---|---|---|---|
1 | XXX | Chest | HUGE | udf_GetChestCount |
2 | YYY | Tube | SMALL | udf_GetTubeCount |
3 | XXX | Box | TINY | udf_GetBoxCount |
我想要的结果集应该是这样的:
ID | ContainerType | Size | Container COUNT |
---|---|---|---|
1 | Chest | HUGE | 13 (count obtained by calling udf_GetChestCount) |
3 | Box | TINY | 11 (count obtained by calling udf_GetBoxCount) |
每一行都会有自己的 UDF 来调用以获得容器计数。 我不确定如何做最后一部分。
我正在尝试执行以下操作(@uid = 'XXX ')
SELECT ID, ContainerType, Size, (EXEC(UDF)(@uid) AS [ContainerCount]
FROM TblContainers WHERE UID=@uid
但这对我不起作用。我将如何构建一个 return 我需要的查询?
我最终使用了 CASE 语句,并按照 Peter Mith 和 Stu 的建议直接调用函数。谢谢大家
CREATE FUNCTION [dbo].[udf_GetContainerCounts](@uid VARCHAR(30))
DECLARE @v_ID numeric;
SET @v_UID = 'XXX';
SELECT ID, ContainerType, Size, UID,
CASE
WHEN ContainerType = 'CHEST' THEN (call UDF)
WHEN ContainerType = 'TUBE' THEN (call UDF)
WHEN ContainerType = 'BOX' THEN (call UDF)
ELSE 0
END AS [ContainerCount]
FROM TBLContainers;