【发布时间】:2019-11-07 16:22:49
【问题描述】:
我有一个表格,其中包含“报告”或“通讯信”(html 文件)列表。此列表将出现在网站的下拉列表中。其中一些项目需要“检查”以查看是否允许将它们添加到下拉列表中。
在此表中有一个列“Cor_PolNeedCheck_ToShow”。此值链接到存储该文件查询的不同表。
从这里我需要创建一个查询来构建将要显示的实际列表。但为了做到这一点,我需要运行第二个表中的查询来执行检查。为此,我创建了以下查询并返回了预期的结果:
DECLARE @retvalue INT
DECLARE @Paramater NVARCHAR(20) = '241215'
DECLARE @Cor_GroupCde NVARCHAR(10) = 248
DECLARE @Statement NVARCHAR(500);
SELECT @Statement = (SELECT Lookup_Query + @Paramater FROM [dbo].[Ref_Lookup]
WHERE Lookup_ID = (Select Cor_PolNeedCheck_ToShow FROM dbo.Ref_Correspondence WHERE Cor_Group_Cde = @Cor_GroupCde));
EXEC @retvalue = sp_executesql @Statement;
PRINT @retvalue
该值需要再次传递到查询中,以验证每条记录是否显示。这是将运行以显示项目的查询(我在查询中添加了上面的 @retvalue 只是为了显示它需要做什么)。此查询位于存储过程中,@Paramater 将从应用程序(上方)传递,然后根据需要用于下方(因为上面的查询需要适合此查询)。
SELECT Cor_Group_Cde, Cor_Desc
FROM Ref_Correspondence
WHERE Cor_Show = 'Y' AND Cor_Prod_List Like '%#' + @ProdID + '#%'
AND (Cor_PolNeedCheck_ToShow IS NULL OR --@retValue > 0)
我面临的问题是我需要将@retValue 放入 where 子句中。 我有一个存储过程,但是不能在 where 子句中调用存储过程。然后我想到了一个用户定义的函数,但问题是你不能在函数中调用存储的过程(“sp_executesql”)。
由于公司标准,我也无法在应用程序中执行此操作。有没有办法解决这个问题,或者有没有办法做到这一点,我可能错过了上述内容?
-------- 编辑 ---------
我创建的函数如下所示:
USE [DBName]
GO
/****** Object: UserDefinedFunction [dbo].[ufn_CorrespondenceCheckResult] Script Date: 4/11/2019 5:35:04 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[ufn_CorrespondenceCheckResult]
(
@Paramater nvarchar(20),
@Cor_GroupCde nvarchar(10)
)
RETURNS int
AS
BEGIN
DECLARE @Statement nvarchar(MAX);
DECLARE @Return int;
set @Return = 0;
SELECT @Statement = (SELECT Lookup_Query + @Paramater FROM [dbo].[Ref_Lookup]
WHERE Lookup_ID = (Select Cor_PolNeedCheck_ToShow FROM dbo.Ref_Correspondence WHERE Cor_Group_Cde = @Cor_GroupCde));
EXEC @Return = sp_executesql @Statement;
return @Return;
结束
在我的脚本中运行上述函数给我一个错误“只能在函数内执行函数和一些扩展存储过程。”:
SELECT Cor_Group_Cde, Cor_Desc
FROM Ref_Correspondence
WHERE Cor_Show = 'Y' AND Cor_Prod_List Like '%#' + @ProdID + '#%'
AND (Cor_PolNeedCheck_ToShow IS NULL OR ((SELECT [dbo].[ufn_CorrespondenceCheckResult] (@Paramater,@Cor_GroupCde)) > 0))
【问题讨论】:
标签: sql sql-server tsql