繁体   English   中英

在查询中执行动态SQL

[英]Execute dynamic sql in query

我想有这样的查询

SELECT
    param1,
    param2,
    param3,
    getHidden(param1, param3)
FROM xxx

我的函数必须在其中构建一个动态查询,执行该查询并返回0或1。

CREATE FUNCTION getHidden (@param1 VARCHAR(50), @param2 INT) RETURNS INT AS
BEGIN
    DECLARE @firstSelect VARCHAR(200);
    DECLARE @query VARCHAR(1000);
    SELECT @firstSelect = restriction FROM xxxx WHERE param1 = @param1 AND param2
    SET @query = 'SELECT (CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END) FROM xxx WHERE ' + @firstSelect;
    -- EXEC @query?
    RETURN 1
END

我在动态查询执行中受阻,是否有解决此问题的解决方法?

杰里米(Threx)

编辑:详细信息在jasper ireport中,我必须进行查询(仅一个),该查询应该能够返回并显示问题列表。 在数据库中,每一行都有一个问题,并且可能有一个限制字段。 此字段包含WHERE约束(内容示例:BEIE_Emp_Nb = 0)在我的php程序中,我使用此字段来构建查询。 我的最终查询将是:

SELECT param1, param2 FROM questions WHERE 1 = 1 AND $constraint
这给了我
SELECT param1, param2 FROM questions WHERE 1 = 1 AND BEIE_Emp_Nb = 0

我不知道这是否足够清楚。 问题是我必须查询约束字段以获取实际问题,然后构建查询并返回结果。

您不能在SQL Server函数中调用诸如sp_executesql类的存储过程。 这意味着您不能在函数内定义和执行动态SQL代码。 原因是不允许函数具有副作用 (例如,调用动态变量和更改数据或参数,就像对动态SQL查询所做的那样,以及执行诸如INSERT,DELETE或UPDATE之类的操作)。

只有存储过程可以调用函数,而不能相反。 在此处检查功能的限制和限制。 然后,您应该创建一个存储过程而不是一个函数来解决您的问题。

要执行动态查询, EXEC与输出变量一起使用。

DECLARE @nResult INT

EXEC sp_executesql @query, N'@nResultNew INTEGER OUTPUT', @nResult OUTPUT

RETURN @nResult 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM